私は
sample_layout.xml
という名前のレイアウトを持っていますが、は複数回使用しますが、のたびにを使用します。DataBindingを除いて、Android Studioで複数の異なる属性を持つ同じレイアウトを複数回使用する方法はありますか?<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="wrap_content" android:orientation="vertical" android:layout_marginBottom="20dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="110dp" android:background="@drawable/full_panel_blue" android:padding="10dp" android:layout_marginBottom="20dp"> <ImageView android:layout_width="120dp" android:layout_height="120dp" android:src="@mipmap/first_icon" /> <LinearLayout android:layout_width="350dp" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:gravity="end" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/my_white" android:text="4000000" android:textSize="50sp" android:gravity="end"/> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="end" android:textColor="@color/my_white" android:textSize="20sp" android:text="Sample text" /> </LinearLayout> </RelativeLayout> </LinearLayout>
低いが、それはそう何回
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/sample_layout"/> <include layout="@layout/sample_layout"/> <include layout="@layout/sample_layout"/> </LinearLayout>
にも含まれますレイアウトですが、私はそれにそれがあると同じように最初の時間を含めたいが、2番目の の代わりに
@drawable/full_blue_panel
を使用しました。別の ドロアブル(@drawable/red_w_transparency
)を使用します。また、ImageView
についてもう一度別のアイコンをsrc
に、もう一度アイコンを もう一度使いたいです。以前に作成された属性のいずれかの場合は、毎回TextView
の異なるテキストなどがあります。私は 既にDataBindingで何かを試しましたが、私はそれが にちょうど適しているとは思いません。これに他の方法はありますか?
0
A
答えて
1
一般的に、カスタムView
サブクラスを作成することでこの種の問題を解決します。 https://developer.android.com/guide/topics/ui/custom-components.html#compound
短いバージョンでは、変更する部分に影響を与えるカスタム属性を定義し、その属性を読み取ってビュー階層を変更するView
サブクラス実装を作成します。あなたのポストされた例では
、あなたはこれらの関連ポイントがあります。
- を根には、あなたが
ImageView
SRC - にあなたを変更したい
RelativeLayout
背景 - を変更したい
LinearLayout
- です
TextView
テキストを変更したい
あなたのattrs.xml
でこれらの属性を作成することができます。
<declare-styleable name="MyCompoundComponent">
<attr name="background"/>
<attr name="imageSrc"/>
<attr name="primaryText"/>
</declare-styleable>
次に、あなたはあなたのビュークラスを作成します。
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCompoundComponent);
// read your attributes
a.recycle();
inflate(context, R.layout.my_compound_component, this);
// find your views, use your attributes to modify them
}
}
そして、もちろん、あなたがレイアウトを必要とする:あなたの元のレイアウトのルートはLinearLayout
だったので、私たちはそこから派生します。あなたはLinearLayout
の中でそれを膨らませているので、ルート要素を<merge>
に変更することを除いて、上に投稿したものを使うことができます。[OK]を、私はすべてのことを行っているが、それでも私はそれがどの `知っているだろうか見ていけない
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.example.stackoverflow.MyCompoundComponent
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:background="@color/blue"
app:imageSrc="@drawable/image1"
app:primaryText="@string/text1"/>
<com.example.stackoverflow.MyCompoundComponent
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:background="@color/red"
app:imageSrc="@drawable/image2"
app:primaryText="@string/text2"/>
</LinearLayout>
関連する問題
- 1. xsdを使用して同じフィールドを複数の異なる属性で複数回検証する
- 2. Android同じフラグメントを複数回使用する - 異なるonclickアクションを持つ方法
- 3. 同じタグと複数の属性を持つSAX parse xmlの使用方法
- 4. 複数のプロパティを持つ1つのデータアノテーション/属性を使用する方法はありますか?
- 5. IMetadataAware属性を同じフィールドで複数回使用できますか?
- 6. 複数のquery.whereEqualToを同じキーで複数回使用する方法
- 7. 異なるサービス引数を持つ複数のエンティティに同じEntityListenerを使用
- 8. XMLの要素タグに同じ属性を複数回追加する方法
- 9. Elmの同じページに複数回フラグを使用してコンポーネントをロードする方法はありますか?
- 10. 同じメソッドを複数の異なるパラメータで複数回実行するC#
- 11. 同じUIPickerViewを異なるデータで複数回使用するには? - Swift
- 12. 同じオブジェクトを使用して複数回ダイアログを表示する方法はありますか?
- 13. 同じHTMLを同じHTMLで複数回使用する方法
- 14. Socket.ioイベントで毎回異なる変数を持つ同じ関数の複数のインスタンスを作成する
- 15. PHPページで同じonclick関数を複数回使用する方法は?
- 16. 関数concat()で同じ変数を複数回使用する方法
- 17. 複数のデータテーブルが同じページにあり、異なるAjaxソースを持つ
- 18. 同じXSLTで異なる一致を持つ複数のテンプレートを使用する方法
- 19. ビューで同じAngularJS 1.5コンポーネントを複数回正しく使用する方法はありますか?
- 20. 同じ 'name'属性を持つ複数の入力フィールドを提出する
- 21. 同じアクションの異なるパラメータを持つ複数のルート
- 22. mysqlの同じ列を持つ複数のテーブルから削除する方法
- 23. asposeで同じマージフィールドを複数回繰り返す方法は?
- 24. テレグラムボット:同じドメインに異なるルートを持つ複数のボット
- 25. 同じスタイルを持つ複数のクラスが異なる値
- 26. わずかに異なる属性を持つ同じ製品のMagento製品ページを複数作成する最も良い方法は何ですか?
- 27. 同じ整数をscanfで複数回使用する
- 28. EF6:複数のエンティティが同じプライマリキーを持つ可能性があります
- 29. 同じ機能を持つ複数のイベントを使用する
- 30. 同じ値を持つ複数の行を使用するテーブル
:
の場所にあるすべてのものと、あなただけの他のビューのようなあなたの他のレイアウトでは、このビューを使用することができますImageSrc'は2つの 'ImageView'があるのでカスタムレイアウトで変更されます。または、カスタムビューにもっと多くのテキストがあるので変更する必要のあるテキストを知る方法は(入れ子になっています) –
複数の属性を作成します。おそらく ' 'と ' 'または ' ' vs ' attr name = "foreground" /> 'など。コード内のそれらを取得し、それらを適切なビューに割り当てることができます。 –