AbsListView LayoutParams设置布局引力
我如何设置AbsListView.LayoutParams的布局重力?
我在自定义数组适配器中使用它,我需要根据变量设置布局引力。 我的列表子包含线性布局根,但在适配器中,我无法设置LinearLayout参数,因为我收到LinearLayout.LayoutParams无法转换为AbsListView.Layout参数的错误。
所以,我试图为一个AbsListView设置layout_gravity,但它没有重力的选项。
如何在这种情况下以编程方式设置layout_gravity?
编辑:(添加源代码)
列表视图父
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/messaging_background"
android:orientation="vertical"
android:padding="2dp" >
<ListView
android:id="@+id/messageThread"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/list_separator"
android:layout_alignParentTop="true"
android:layout_marginTop="5dp"
android:cacheColorHint="#00000000"
android:divider="@null"
android:dividerHeight="2dp"
android:fastScrollEnabled="false"
android:listSelector="#00000000"
android:transcriptMode="disabled" />
<View
android:id="@+id/list_separator"
android:layout_width="match_parent"
android:layout_height="1.0dip"
android:layout_above="@+id/footer"
android:background="@android:color/white" />
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/filter"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.1"
android:background="@null"
android:contentDescription="@string/message_filter_button"
android:scaleType="fitCenter"
android:src="@drawable/filter" />
<EditText
android:id="@+id/send_message_text"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:imeOptions="actionSend"
android:inputType="textMultiLine"
android:maxLines="6"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbarDefaultDelayBeforeFade="200"
android:scrollbarFadeDuration="300"
android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical" />
<ImageButton
android:id="@+id/send"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.1"
android:background="@null"
android:contentDescription="@string/send_message_button"
android:scaleType="fitCenter"
android:src="@drawable/send_btn" />
</LinearLayout>
</RelativeLayout>
Listview子项
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/incoming"
android:orientation="horizontal" >
<TextView
android:id="@+id/messaging_bubble_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:fontFamily="sans-serif-light"
android:maxWidth="200dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textIsSelectable="true" />
<TextView
android:id="@+id/messaging_bubble_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:paddingRight="5dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textIsSelectable="false" />
<ImageView
android:id="@+id/messaging_bubble_megaphone"
android:layout_width="20dp"
android:layout_height="match_parent"
android:contentDescription="@string/message_child_megaphone"
android:src="@drawable/megaphone"
android:visibility="gone" />
</LinearLayout>
我应该在getView中调用适配器以根据适配器中的变量将孩子推向右侧?
编辑2:
一个可能的解决方案:将整个小孩包裹在根下的另一个元素下,然后您可以设置重力而不是布局重力,这可以使用setGravity()
方法轻松完成。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/messaging_bubble_wrapper"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/incoming"
android:orientation="vertical"
tools:ignore="UselessParent" >
第二个线性布局是无用的,但它可以完成工作!
要改变重力,你可以将现有的行布局封装在另一个布局(例如FrameLayout
)中,然后简单地从该布局(现在可以在父层中移动)设置LinearLayout
的重力。
为避免在布局中添加额外的级别,您可以保留当前的行布局,并使用RelativeLayout
替换根LinearLayout
,并根据您所需的重力更改其中的视图位置。
我通过在我的根元素下创建另一个“无用的视图(在日食的话)”解决了这个问题。
我将父级的宽度设置为match_parent,然后更改重力以向左或向右移动“无用视图”。 所述setGravity(Gravity.LEFT)
方法被允许在AbsListView
。
我认为你需要摆脱ListView。 将ListView替换为FrameLayout,并使用layoutinflater将“listview”子项添加到FrameLayout中。 使用layoutinflater时,将FrameLayout.LayoutParams设置为分配给子项根部的重力属性(LinearLayout)。 祝你好运。
链接地址: http://www.djcxy.com/p/93295.html上一篇: AbsListView LayoutParams Set Layout Gravity
下一篇: Left aligning images in LinearLayout using gravity or linear