私は、LinearLayout + ImageViewx2 + TextViewの組み合わせであるカスタムコンポーネントを持っています。カスタムコンポーネントはクリック可能で、ボタンのようなオレンジ色の背景を点滅させることで、ユーザーがビジュアルフィードバックをクリックすると、そのビジュアルフィードバックが表示されます。私は、コンポーネントの内部状態に基づいて異なるスタイルを使用するために、次の描画可能ファイルを作成しました。ここで描画可能です:LinerLayoutでセレクタドロワブルを使用してさまざまな状態を表現できますか?
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/sunshine_gradient" />
<item android:state_focused="true" android:drawable="@drawable/winter_background" />
<item android:drawable="@drawable/component_background" />
</selector>
私も描画可能に参照するスタイルを定義した:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:padding="5dp"
android:orientation="horizontal"
android:clickable="true"
style="@style/navigation_item">
<ImageView android:id="@+id/navigationIcon"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginRight="5dp"/>
<TextView android:id="@+id/navigationTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_weight="1.0"
android:singleLine="true"
style="@style/favoriteTitle"
android:layout_marginRight="5dp"/>
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/right_arrow"/>
</merge>
マイコンポーネントのコードは次のとおりです:
次に部品に使用していることを割り当てられ<style name="navigation_item" parent="android:Theme.Dialog">
<item name="android:background">@drawable/navigation_item</item>
</style>
public class NavigationItem extends LinearLayout {
public NavigationItem(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(HORIZONTAL);
setGravity(Gravity.CENTER);
setWeightSum(1.0f);
setClickable(true);
LayoutInflater.from(context).inflate(R.layout.navigation_item, this, true);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.NavigationItem, 0, 0);
String title = array.getString(R.styleable.NavigationItem_title);
if(title == null) title = "";
((TextView)findViewById(R.id.navigationTitle)).setText(title);
Drawable icon = array.getDrawable(R.styleable.NavigationItem_icon);
if(icon != null) {
((ImageView)findViewById(R.id.navigationIcon)).setImageDrawable(icon);
}
array.recycle();
}
}
デフォルトでは@ drawable/component_backgroundを持っているので、コンポーネントはdrawableを取り上げているようです。それをクリックすると動作しません。私は、押した状態やフォーカスに状態変化がないのを見ています。これはデフォルトのLinearLayoutで行うことができますか?