Зарезервировать «слот» в XML-файле макета для динамически создаваемой кнопки? - PullRequest
3 голосов
/ 10 мая 2011

В моем приложении есть один (и только один) элемент пользовательского интерфейса, на который нет ссылки в файле макета XML.

Этот элемент представляет собой кнопку, которая создается и возвращается во время выполнения сторонней библиотекой (т.е. я не могу это контролировать).

Моя проблема в том, что я хотел бы, чтобы некоторые элементы (TextViews) в файле макета XML были размещены относительно этой кнопки , используя RelativeLayout.

Можно ли "зарезервировать пустой слот" в файле макета XML для этой кнопки, чтобы я мог сделать что-то вроде следующего?

    <TextView android:id="@+id/tv_text_under_button"
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_dynamically_created_button"
        android:text="" />

В качестве альтернативы, если бы я устанавливал макет во время выполнения с помощью RelativeLayout.LayoutParams.addRule(), каким был бы идентификатор этой динамически создаваемой кнопки, если она вообще не имеет ссылки в файле макета XML?

Например, в следующем вызове:

layoutParams.addRule(RelativeLayout.BELOW, R.id.btn_dynamically_created_button);

Что бы я положил вместо R.id.btn_dynamically_created_button?

Обновление : Благодаря приведенному ниже ответу я создал заполнитель, подобный этому:

    <LinearLayout android:id="@+id/btn_dynamically_created_button"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    </LinearLayout>

Задача теперь такова: как связать возвращенный объект из getDynamicallyCreatedButton () (возвращаемый объект является подклассом LinearLayout, не Button), с R.id.btn_dynamically_created_button?

РЕДАКТИРОВАТЬ: Эта тема , кажется, решить аналогичную проблему, но я не уверен, что понимаю предложенное решение.

1 Ответ

1 голос
/ 10 мая 2011

Я бы посоветовал:

  1. Поместить LinearLayout с шириной / высотой, установленной в качестве наполнителя, горизонтальной ориентации и заполнения нулями в качестве заполнителя.
  2. Ориентировать все остальные вещик этому LinearLayout.
  3. Когда пришло время поместить кнопку, просто вставьте ее в LinearLayout.

Посмотрите, работает ли это для вас.

РЕДАКТИРОВАТЬ: попыткав кратком примере:

Макет (соответственно сокращенный): вы можете разместить другие компоненты относительно LinearLayout с идентификатором LinearLayout01 .

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_marginTop="2sp" android:layout_marginBottom="2sp" android:layout_height="wrap_content">
        <LinearLayout android:id="@+id/LinearLayout01" android:layout_height="wrap_content" android:layout_width="wrap_content" android:gravity="right" style="@style/SimpleButtonBar" android:layout_below="@+id/rootlayout" android:layout_alignParentBottom="true">
        </LinearLayout>
        <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:layout_above="@+id/LinearLayout01" android:fillViewport="true">
                <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/detaillayout">
        </RelativeLayout>
    </ScrollView>
</RelativeLayout>

Код (дляНапример, это будет выглядеть как onCreate): выберите вашу кнопку (вам нужно убедиться, что у нее правильный контекст, но я думаю, что вы все делаете правильно), выберите LinearLayout, создайте объект параметров макета и прикрепите вашу кнопкув LinearLayout.

Кнопка b = getButton ();// получить вашу кнопку как-то

LinearLayout l = (LinearLayout)findViewById(R.id.LinearLayout01);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
l.addView(b, lp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...