Пользовательский макет на основе существующего макета - PullRequest
3 голосов
/ 21 апреля 2011

Я пытаюсь создать собственный макет для Android. Обычно рисует на экране, но без внутренних видов. Рисует только мой group_box.xml. Как я могу получить доступ из своего пользовательского макета к внутренним представлениям (TextView с идентификатором test) или как их нарисовать?

main.xml

<my.example.GroupBox
            android:layout_width="match_parent"
            android:layout_height="40sp">
        <TextView android:text="TEST"
                  android:id="@+id/test"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"/>
    </my.example.GroupBox>

group_box.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                style="@style/groupbox">
    <LinearLayout style="@style/groupboxContent"
                  android:id="@+id/content"
                  android:layout_height="match_parent"
                  android:layout_width="match_parent"/>
    <TextView style="@style/groupboxLabel"
              android:id="@+id/caption"
              android:text="@string/visit"/>
</RelativeLayout>

GroupBox.java

public class GroupBox extends LinearLayout {

    public GroupBox(Context context) {
        super(context);
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.group_box, this);
    }

    public GroupBox(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.group_box, this);
    }
}

1 Ответ

6 голосов
/ 21 апреля 2011

вы можете получить доступ к элементам через сеттеры и геттеры.

поместите это в свой GroupBox.java

caption = (TextView) findViewById(R.id.caption);

 public void setLabel(CharSequence text) {
        caption.setText(text);
    }

добавить идентификатор для вашего элемента управления в xml:

<my.example.GroupBox
            android:layout_width="match_parent"
            android:layout_height="40sp"
android:id="mycontrol">
        <TextView android:text="TEST"
                  android:id="@+id/test"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"/>
    </my.example.GroupBox>

затем найдите свой контроль в основной деятельности и сделайте это:

yourcontrol = (GroupBox) findViewById(R.id.mycontrol)

yourcontrol.setLabel("test");
...