2

AbsListView.LayoutParams のレイアウト グラビティを設定するにはどうすればよいですか?

変数に基づいてレイアウトの重力を設定する必要があるカスタム配列アダプターでこれを使用しています。リストの子にはリニア レイアウト ルートが含まれていますが、アダプターでは、LinearLayout.LayoutParams を AbsListView.Layout パラメーターにキャストできないというエラーが発生するため、LinearLayout パラメーターを設定できません。

そこで、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>

リストビューの子

<?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" >

2 番目の線形レイアウトは役に立ちませんが、これで作業は完了です。

4

4 に答える 4

5

重力を変更するには、既存の行レイアウトを別のレイアウト (FrameLayoutたとえば) でラップしLinearLayout、その余分なレイアウトから重力を設定するだけです (親内に移動できるようになりました)。

レイアウトに余分なレベルを追加しないようにするには、現在の行レイアウトを維持し、ルートLinearLayoutを aに置き換え、RelativeLayout目的の重力に従ってその中のビューの位置を変更します。

于 2013-07-04T04:35:56.837 に答える
2

ルート要素の下に別の「役に立たないビュー(Eclipseの言葉で)」を作成することで、この問題を解決しました。

親の幅を match_parent に設定し、重力を変更して「役に立たないビュー」を左右に移動しました。メソッドはsetGravity(Gravity.LEFT)で許可されていAbsListViewます。

于 2013-07-04T03:12:41.583 に答える
1

子のコンテンツの重力を次のように設定できますsetGravity()

View child;
boolean left;

child.setGravity(left ? Gravity.LEFT : Gravity.RIGHT);

そして、子はに変更する必要がありますandroid:layout_width="match_parent"

于 2013-06-28T18:15:59.557 に答える
1

ListView を削除する必要があると思います。ListView を FrameLayout に置き換え、layoutinflater を使用して "listview" 子を FrameLayout に追加します。layoutinflater を使用する場合、FrameLayout.LayoutParams を設定し、gravity プロパティを子のルート (LinearLayout) に割り当てます。幸運を。

于 2013-06-27T11:06:22.420 に答える