Как выровнять текстовое представление с виджетом выше? - PullRequest
0 голосов
/ 04 октября 2011

Мой пользовательский интерфейс содержит два элемента: кнопка сверху и текстовое представление под кнопкой. Ширина кнопки установлена ​​на «wrap_content», поэтому она изменит свою ширину, когда я установлю другой текст для кнопки во время выполнения. Я хочу, чтобы текстовое представление всегда выравнивалось по кнопке (имеет одинаковую ширину), особенно пользовательский интерфейс сначала загружается.

Я пытался получить ширину кнопки в событии onGlobalLayout и установить ширину textview, но, похоже, это не работает. Кто-нибудь может мне помочь?

UPDATE:

Я думаю, что мог бы упростить мою проблему. Настоящий пользовательский интерфейс имеет множество виджетов (и кнопки, и текстовое представление в моем вопросе), сгенерированных кодом. Поэтому я не могу использовать XML для их определения. И поскольку пользовательский интерфейс загружен не полностью, я не могу использовать getWidth () для получения реальной ширины кнопки при выравнивании текстового представления.

Ответы [ 3 ]

1 голос
/ 04 октября 2011

Создайте этот макет в XML, используйте RelativeLayout в качестве контейнера для Button и TextView.

Затем для TextView вы должны указать выравнивание:

android:layout_alignLeft="@+id/button1" 
android:layout_alignRight="@+id/button1"

, поэтому его левая и правая частивыровнен по вашей кнопке.

Примечание: вы можете сделать то же самое из java-кода, используя RelativeLayout.LayoutParams, но это сложнее, чем с использованием XML.

1 голос
/ 04 октября 2011

Я думаю, вы должны использовать Android LayoutParams.

http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

В onCreate или в коде, где вы устанавливаете текст для кнопки.После установки кнопки text int вы должны установить ширину для textview = width кнопки, используя параметры макета кнопки.

0 голосов
/ 04 октября 2011

В случае, если вам нравится работать в коде, это один пример, касающийся кнопки и TextView, имеющих одинаковую ширину:

public class MainActivity extends Activity {
    Button mButton;
    TextView mText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        

        mButton = (Button)findViewById(R.id.button);
        mText = (TextView)findViewById(R.id.text);

        updateUI();
    }

    public void updateUI() {
        int wButton = mButton.getWidth();
        int wText = mText.getWidth();

        if(wButton < wText) {
            mButton.setWidth(wText);
        } else {
            mText.setWidth(wButton);
        }
    }
}

Что ж, недостатком является необходимость вызова updateUI () при каждом обновлениитекст любого элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...