2011-12-17 2 views
1

Это похоже на простой вопрос, который я могу найти легко, но у меня возникли проблемы с пониманием того, как создать многоразовый компонент пользовательского интерфейса для Android. В частности, я пытаюсь создать этот фрагмент, который я использую EVERYWHERE в компоненте многократного использования, чтобы сделать код меньше.Как создать многократно используемый компонент пользовательского интерфейса

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingBottom="0dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:paddingTop="10dp">   
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:textColor="@color/text_normal" 
     android:id="@+id/my_text_id" 
     android:text="My field"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:textColor="@color/text_normal" 
     android:text="My value" 
     android:id="@+id/my_value_id"/> 

</RelativeLayout> 

Они используются как этот

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@color/background_normal" 
    android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
      <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingBottom="0dp" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:paddingTop="10dp">   
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:textColor="@color/text_normal" 
       android:id="@+id/my_text_id" 
       android:text="My field"/> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:textColor="@color/text_normal" 
       android:text="My value" 
       android:id="@+id/my_value_id"/> 

      </RelativeLayout> 
    </LinearLayout> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
      <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingBottom="0dp" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:paddingTop="10dp">   
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:textColor="@color/text_normal" 
       android:id="@+id/my_text_id2" 
       android:text="My field2"/> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:textColor="@color/text_normal" 
       android:text="My value2" 
       android:id="@+id/my_value_id2"/> 

      </RelativeLayout> 
      .... etc .... 
    </LinearLayout> 
</ScrollView> 

Я надеюсь, чтобы иметь возможность получить доступ к обеим текстовым полям для присвоения значений внутри, которые будут добавлены с <include /> тегом макета. Кто-нибудь знает как это сделать?

Я видел http://developer.android.com/resources/articles/layout-tricks-reuse.html, но, похоже, я не вижу, как назначить несколько одинаковых полей.

Любая помощь приветствуется.

Обновление Они используются для размещения TextView слева от экрана, а другой справа выстроены вместе. Не знаете, как это описать, но они используются в ScrollView.

+0

, где вы хотите повторно использовать этот макет точно? для заголовка или еще? –

+0

Обновлено описание – Kirk

ответ

3

использования включают тег, как указано на стороне разработчиков http://developer.android.com/resources/articles/layout-tricks-reuse.html

и найти компонент внутри этого макета сделать как этот

findViewById(R.id.include03).findViewById(R.id.Spinner01) 

inculde03 имя включаемого компонента в макете и spinner01 будет компонент внутри макета include, который может быть другим компонентом, который вы также используете в своем макете.

+1

Работало отлично. Полагаю, мой вопрос должен был спросить, как обратиться к внутренним взглядам, но вы это поняли. – Kirk

+1

ссылка не действительна: 404 не найдено – netimen

+0

@netimen Я постараюсь обновить последний раз. как dev. сайт изменен, нужно найти правильную ссылку .. –

2

Используйте «включить» и «слить», чтобы «ввести» макеты в существующий макет. После включения вы можете ссылаться на представления так же, как если бы они были в макете.

Если вы хотите, чтобы «включить» тот же макет несколько раз, то у вас есть два варианта:

а) Используйте ListView и адаптер, чтобы повторить вид б) Надуйте мнения в коде и добавить их вручную с помощью addView(). Когда вы надуваете каждый вид, вы можете использовать findViewById для таргетинга виджетов именно в этом представлении.

Смежные вопросы