0

次のように定義された行がありListViewます (Eclipse Android SDK のグラフィカル ビューのスクリーンショット):

Eclipse IDE 行

問題は、この行の小さな画面でのみ、最後のレイアウト要素 (星) が「隠されている」ことです。大きな画面では、同じレイアウト 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>

結果:

HVGA エミュレーターで LinearLayout を切り取った

星のボタンを押すと、(所定の位置に) 表示されます。

HVGA エミュレーターで 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>

結果:

HVGA エミュレーターで 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>

結果:

HVGA エミュレーターで FrameLayout を切り取った

ご覧のとおり、何も役に立たず、私は少し「困惑」しています。

これを修正する方法を教えてください。

4

2 に答える 2

0

最初に、レイアウトを作成するときにどのデバイスを選択したかを確認します。これは、グラフィカル レイアウト xml のトップ バーにあるはずです。デフォルトのレイアウト フォルダは、4 ~ 7 インチの画面を持つデバイスで機能します。ただし、デバイスの DPI に基づいてレイアウトの誤動作も発生します。そのため、複数のレイアウト フォルダーを作成して、さまざまなレイアウトとその横向きフォルダーもサポートする必要があります。

多くのレイアウトを作成する必要はありません。これは、画面サイズと dpi が異なるデバイスごとに異なるレイアウトを作成する必要があるためです。そのため、スターが画面からはみ出しています。

http://developer.android.com/guide/practices/screens_support.html

このリンクにアクセスして読んでください。

于 2013-11-10T13:22:19.947 に答える
0

drawable-mdpi解決策は、イメージのプロジェクトにリソースを追加することでしたbtn_star_holo_light_off(1 つしかありませんdrawable-xhdpiでした)。

于 2013-11-10T19:18:05.530 に答える