線形レイアウトを設定して、クリック可能+フォーカスにするように設定しましたが、問題は、クリックしてもフォーカスが表示されないことです。フォーカスを表示するにはどうすればよいですか。
これが私のコードです
<LinearLayout
Android:id="@+id/linear_tv_layout"
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:clickable="true"
Android:focusable="true"
Android:paddingBottom="7px">
クリック可能なビュー(レイアウト)の背景として設定する必要があると思います 状態リストドローアブル 、これはドローアブルリソースであり、さまざまな状態または状態の組み合わせに対してさまざまなドローアブルを指定できます。選択、プレス用など。また、レイアウトの状態はそのすべての子に伝播します。
明確化-これは、以前にリンクされたドキュメントの例です。
res/drawable/button.xml :
(描画可能な状態リストです)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true"
Android:drawable="@drawable/button_pressed" /> <!-- pressed -->
<item Android:state_focused="true"
Android:drawable="@drawable/button_focused" /> <!-- focused -->
<item Android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
button_pressed
、button_focused
、およびbutton_normal
は、これらの状態のボタンを表す通常のドローアブルであり、おそらくpngです(押すと挿入され、オレンジ色で強調表示されます)。
このリソースを「線形レイアウトボタン」の背景として設定した場合:
<LinearLayout
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:background="@drawable/button">
...
</LinearLayout>
これで、レイアウトの焦点を合わせると、背景画像が自動的に@drawable/button_focused
に設定されます。
もちろん、使用するすべてのドローアブルは、res/drawable/
とともにbutton.xml
のリソースである必要があります。
マテリアルデザインのボタンを押すアニメーション を任意の要素に適用するには、要素のAndroid background属性を次のように設定します。
Android:background="?android:attr/selectableItemBackground"
あなたの場合:
<LinearLayout
Android:id="@+id/linear_tv_layout"
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:clickable="true"
Android:focusable="true"
Android:paddingBottom="7px"
Android:background="?android:attr/selectableItemBackground">
@danLeon:Android:background = "@ Android:drawable/btn_default"の代わりに
あなたは使用する必要があります
Android:background = "@ Android:drawable/list_selector_background"
前者はUIも変更しますが、これは必須ではありません。
ここにサンプルレイアウトがありますこれはあなたにいくつかのアイデアを与えることができます:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<LinearLayout
Android:background="@Android:drawable/btn_default"
Android:clickable="true"
Android:focusable="true"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
>
<ImageView
Android:id="@+id/image"
Android:src="@Android:drawable/star_big_on"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
Android:background="@Android:drawable/btn_default"
Android:clickable="true"
Android:focusable="true"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
>
<ImageView
Android:id="@+id/image"
Android:src="@Android:drawable/star_big_on"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
簡単な方法は、次の属性を設定することです。Android:background="@Android:drawable/btn_default"
<LinearLayout
Android:id="@+id/linear_tv_layout"
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:clickable="true"
Android:focusable="true"
Android:paddingBottom="7px"
Android:background="@Android:drawable/btn_default"
>
そのレイアウトをコードの前面に表示してみてください。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
View mainView = this.findViewById(R.id.mainView);
this.setContentView(mainView);
LinearLayout linear_tv_layout = (LinearLayout)mainView.findViewById(R.id.linear_tv_layout);
linear_tv_layout.bringToFront();
// or: mainView.bringChildToFront(linear_tv_layout);
}
それが機能しない場合は、そのLinearLayoutにオーバーラップしているビューが1つ以上あるかどうかを確認してください。