次のように定義された行がありListView
ます (Eclipse Android SDK のグラフィカル ビューのスクリーンショット):
問題は、この行の小さな画面でのみ、最後のレイアウト要素 (星) が「隠されている」ことです。大きな画面では、同じレイアウト XML が期待どおりに (そして IDE で見られるように) 表示/動作します。
この予期しないレイアウト動作は、デバイスとエミュレーターの両方、およびすべてのバージョン(API 8 ~ 19) で発生します。
(オリジナル)のエラーに気づきましたLinearLayout
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="72dp"
android:background="@color/transparent" >
<LinearLayout
android:id="@+id/list_row_checkBox_container"
android:layout_width="48dp"
android:layout_height="fill_parent"
android:clickable="true"
android:gravity="center" >
<CheckBox
android:id="@+id/list_row_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/list_row_text"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/list_row_txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Title"
android:textSize="30sp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/list_row_txtExtra1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:text="First" />
<TextView
android:id="@+id/list_row_txtExtra2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:text="Second" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="48dp"
android:layout_height="fill_parent"
android:gravity="center" >
<!-- android:background="@color/green" -->
<ImageButton
android:id="@+id/list_row_select_icon"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:clickable="true"
android:src="@drawable/btn_star_holo_light_off" />
</LinearLayout>
</LinearLayout>
結果:
星のボタンを押すと、(所定の位置に) 表示されます。
その後、当然、アダプター(ArrayAdapter
ビューホルダーパターン付きの標準)を確認しましたOnTouchListener
が、ボタンの 以外には何もありません。次に、最初に行項目のルート レイアウトを次のように変更してみましたRelativeLayout
。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="72dp"
android:background="@color/transparent" >
<LinearLayout
android:id="@+id/list_row_checkBox_container"
android:layout_width="48dp"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:clickable="true"
android:gravity="center" >
<CheckBox
android:id="@+id/list_row_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/list_row_text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_marginRight="48dp"
android:layout_toRightOf="@+id/list_row_checkBox_container"
android:orientation="vertical" >
<TextView
android:id="@+id/list_row_txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Title"
android:textSize="30sp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/list_row_txtExtra1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:text="First" />
<TextView
android:id="@+id/list_row_txtExtra2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:text="Second" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="48dp"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:gravity="center" >
<ImageButton
android:id="@+id/list_row_select_icon"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:clickable="true"
android:src="@drawable/btn_star_holo_light_off" />
</LinearLayout>
</RelativeLayout>
結果:
そして、最後に、私は試しましたFrameLayout
:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="72dp"
android:background="@color/transparent" >
<LinearLayout
android:id="@+id/list_row_checkBox_container"
android:layout_width="48dp"
android:layout_height="fill_parent"
android:layout_gravity="top|left"
android:clickable="true"
android:gravity="center" >
<CheckBox
android:id="@+id/list_row_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/list_row_text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="top|left"
android:layout_marginLeft="48dp"
android:layout_marginRight="48dp"
android:orientation="vertical" >
<TextView
android:id="@+id/list_row_txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Title"
android:textSize="30sp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/list_row_txtExtra1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:text="First" />
<TextView
android:id="@+id/list_row_txtExtra2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:text="Second" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="48dp"
android:layout_height="fill_parent"
android:layout_gravity="top|right"
android:gravity="center" >
<ImageButton
android:id="@+id/list_row_select_icon"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:clickable="true"
android:src="@drawable/btn_star_holo_light_off" />
</LinearLayout>
</FrameLayout>
結果:
ご覧のとおり、何も役に立たず、私は少し「困惑」しています。
これを修正する方法を教えてください。