#android #layout #button #positioning #css-position
#Android #макет #кнопка #позиционирование #css-position
Вопрос:
Я пытаюсь расположить кнопку в другом месте, используя абсолютный макет. Я использую следующий XML-файл:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bcgrd">
<Button
android:id="@ id/start_challenge"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text = "Start Challenge"
android:textColor= "@color/light_gray"
android:background="@color/background">
</Button>
</AbsoluteLayout>
файл Java содержит следующий код:
Button start_it = (Button)findViewById(R.id.start_challenge);
start_it.layout(200, 200, 200, 200);
но ничего не происходит (200-е приведены только для примера. кто-нибудь, пожалуйста, может сказать мне, что я делаю не так.
Заранее спасибо.
Ответ №1:
Что вы делаете неправильно, так это используете AbsoluteLayout. 🙂 Серьезно, вам действительно не стоит это использовать; попробуйте вместо этого использовать FrameLayout.
Однако, чтобы ответить на ваш вопрос, вы не должны вызывать layout на нем, сделайте это вместо этого:
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams)start_it.getLayoutParams();
params.x = 200;
params.y = 200;
start_it.setLayoutParams(params);
Или с меньшим количеством кода, вы могли бы сделать это вместо:
start_it.setLayoutParams(new AbsoluteLayout.LayoutParams(
start_it.getWidth(), start_it.getHeight(), 200, 200));
Комментарии:
1. не могли бы вы пояснить, почему мы не должны использовать. функция макета @kcoppock
2. @MuhammadBabar AbsoluteLayout устарел и плохо поддерживает несколько размеров экрана.
3. Ну, я задал кое-что другое, но теперь я решил проблему, проблема заключалась в том, что я использовал
layout(int left, int top, int right, int bottom)
функцию, которую мы НИКОГДА не должны использовать, потому что фреймворк может вызывать эту функцию всякий раз, когда представление становится недействительным (обновить) и перемещает его, мы должны использовать LayoutParams для любого изменения положения / размера представления4. Да, вы должны использовать только
layout()
изнутриonLayout()
(если вы пишете пользовательскийViewGroup
).