Атрибут layout_marginBottom в ImageButton игнорируется при программном расширении представления

У меня есть автономный ImageButton, определенный в xml со следующим:

<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/btnTourStartGame"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="32dp"
    android:background="@drawable/tour_btn_start"/>

Этот ImageButton затем динамически увеличивается во фрагменте со следующим кодом. (Примечание: ltTourScreenLast — это относительный макет.)

ImageButton startButton = (ImageButton) inflater.inflate(R.layout.button_tour_start, ltTourScreenLast, false);
startButton.setOnClickListener(this);
ltTourScreenLast.addView(startButton);

В настоящее время атрибут android:layout_marginBottom, по-видимому, игнорируется, когда эта кнопка надувается и находится прямо в нижней части экрана.

Я намерен разместить кнопку 32dp от нижней части экрана. Как мне этого добиться?

Я сослался на следующий пост, но безрезультатно: Проблема макета с полями кнопки (Примечание: я попытался протестировать layout_marginLeft на моем ImageButton, и, похоже, он работает. Однако layout_marginBottom не работает.)


person Brenda Nicole Tan    schedule 11.03.2014    source источник
comment
есть ли какой-либо вид под вашей кнопкой изображения, видимость которого исчезла?   -  person Amrut    schedule 11.03.2014
comment
@Amrut Спасибо за ответ! Этот ImageButton является автономным и будет последним элементом в ltTourScreenLast, и вокруг него нет невидимых элементов.   -  person Brenda Nicole Tan    schedule 11.03.2014


Ответы (2)


Попробуйте поместить ImageView внутрь LinearLayout... затем раздуйте этот макет.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/btnTourStartGame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="32dp"
        android:background="@drawable/tour_btn_start"/>

</LinearLayout>

Надувать следующим образом...

View view =  inflater.inflate(R.layout.button_tour_start, ltTourScreenLast, false);
ImageButton startButton = (ImageButton)view.findViewById(R.id.btnTourStartGame);
startButton.setOnClickListener(this);
ltTourScreenLast.addView(view);
person Hamid Shatu    schedule 11.03.2014
comment
Это работает. Спасибо! Хотя последняя строка кода расширения должна быть ltTourScreenLast.addView(view); вместо этого (: пожалуйста, отредактируйте свой ответ, чтобы я мог пометить его как принятый. Я все еще озадачен, почему android:layout_marginBottom=32dp не работает в этом случае. У кого-нибудь есть идеи? - person Brenda Nicole Tan; 11.03.2014
comment
Я обновил свой ответ... Рад слышать, что он работает... Понятия не имею... но в любом случае он игнорирует поля. - person Hamid Shatu; 11.03.2014

Попробуйте указать нижнюю границу поля в самом коде Java, используя параметры макета.

RelativeLayout.LayoutParams params=showbutton.getLayoutParams();
params.setMargins(0,0,0,32);
showbutton.setLayoutParams(params);
person Priya    schedule 11.03.2014
comment
Спасибо @Priya, я попробовал это, но startButton.getLayoutParams() возвращает ViewGroup.LayoutParams, а не RelativeLayout.LayoutParams. - person Brenda Nicole Tan; 11.03.2014
comment
Попробуйте, как упомянул Хамид Шату, или попробуйте создать свой ImageButton также с помощью кода. - person Priya; 11.03.2014