2014-01-14 6 views
0

Я пытаюсь создать кнопку, которая масштабируется динамически. Во время выполнения я хочу, чтобы его ширина и высота составляли 70% от текущего размера. Однако кнопка исчезает. Вот мой код:Android-кнопка исчезает при изменении размера

Button btn = (Button) v.findViewById(R.id.button_delete_transaction); 
    btn.setMinWidth(0); 
    btn.setMinHeight(0); 

    btn.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); 
    int width = btn.getMeasuredWidth(); 
    int height = btn.getMeasuredHeight(); 

    ViewGroup.LayoutParams params = btn.getLayoutParams(); 

    params.width = (int) .7 * width; 
    params.height = (int) .7 * height; 

    btn.setLayoutParams(params); 

И XML:

<Button 

    android:id="@+id/button_delete_transaction" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:background="@drawable/add_img" 
    android:focusable="false" 

    /> 
+0

вы звоните v.findViewById (R.id.button_delete_transaction) и XML показывает андроид: идентификатор =» @ + id/button_add_transaction " Вы звоните вправо, есть добавление, удаление ошибки. – Aiapaec

+0

Ах, извините. Отредактировано мое сообщение с правильным идентификатором. – user2121620

+0

Это тоже проблема в коде? – Aiapaec

ответ

1

EDIT:

Ааа ... это потому, что вы не отливку правильно как междунар. Вы выбрасываете 0.7 как int (который идет к нулю), а затем умножают его, вместо того, чтобы умножать и затем бросать. Вы можете использовать (int) (.7 * width) вместо (int) .7 * width.

Смотрите мой пример: http://ideone.com/NSGwGF

Во всяком случае, мой совет ниже до сих пор стоит.


Почему бы не использовать:

btn.setWidth((int) Math.round(.7 * width)); 
btn.setHeight((int) Math.round(.7 * height)); 

вместо:

ViewGroup.LayoutParams params = btn.getLayoutParams(); 
params.width = (int) .7 * width; 
params.height = (int) .7 * height; 
btn.setLayoutParams(params); 
+0

Да! проблема заключалась в кастинге. (Однако это не сработает, если я не использую LayoutParams. Весь этот код находится в адаптере, так что это может быть причиной, по которой я не уверен.) – user2121620

+0

Достаточно справедливо. Могу ли я предложить округление с использованием Math.round() до кастинга? Таким образом, он составит 239,9-240 вместо 239. – dberm22

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