24

いつも一緒に使いたいビューがあります。この例は次のようになります。

<LinearLayout>
    <TextView />
    <EditView />
</LinearLayout>

テキストビューはプロンプトであり、編集ビューがその答えです。この組み合わせに名前を付け、その名前を使用してxmlにポップできるようにします。カスタムビューにして、クラスにうまく配置して、さまざまなユーティリティ関数を作成できるようにしたいと思います。それができる方法はありますか?LinearLayoutをサブクラス化し、Javaコードで動的に子を作成できることは知っていますが、それではxmlを介して簡単に変更を加えることができなくなります。より良いルートはありますか?

そして、はい、私はこれをやりたい場所もあります。それは単なるプロンプトよりも複雑です。

4

3 に答える 3

55

この例は水平番号ピッカーウィジェット用ですが、同じ概念です。

まず、カスタムコンポーネントのXMLレイアウトを作成します

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

   <Button
       android:id="@+id/btn_minus"
       android:layout_width="50dp"
       android:layout_height="wrap_content"
       android:text="-" />

   <EditText
       android:id="@+id/edit_text"
       android:layout_width="75dp"
       android:layout_height="wrap_content"
       android:inputType="number"
       android:gravity="center"
       android:focusable="false"
       android:text="0" />

   <Button
       android:id="@+id/btn_plus"
       android:layout_width="50dp"
       android:layout_height="wrap_content"
       android:text="+" />
</LinearLayout>

次に、Javaクラスを作成します

public class HorizontalNumberPicker extends LinearLayout {
    public HorizontalNumberPicker(Context context, AttributeSet attrs) {
         super(context, attrs);
         LayoutInflater inflater = LayoutInflater.from(context);
         inflater.inflate(R.layout.horizontal_number_picker, this);
     }
 }

そのJavaクラスに必要なロジックを追加すると、次のようにカスタムコンポーネントをXMLレイアウトに含めることができます。

<com.example.HorizontalNumberPicker
     android:id ="@+id/horizontal_number_picker"
     android:layout_width ="wrap_content"
     android:layout_height ="wrap_content" />


詳細については、次のリンクを確認してください:http ://developer.android.com/guide/topics/ui/custom-components.html#compound

于 2012-10-19T18:42:29.967 に答える
4

その目的のために複合コントロールを使用します。それについてはたくさんのサンプルとチュートリアルがあります。幸運を )

于 2012-10-19T16:26:49.893 に答える
1

そのXMLをレイアウトXMLファイルに入れ、必要に応じてインフレータを使用してビューを拡張します。

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.some_id, parent, false);

ビューを取得したら、このビューを受け入れて操作を実行するユーティリティクラスを作成できます。ViewHolderパターンfindViewById()を使用して他のビューへの参照を使用または保存することにより、テキストを取得してビューを編集します

于 2012-10-19T16:22:03.593 に答える