2010-11-30 3 views
0

Я хотел бы создать приложение, которое может работать с устройствами любого разрешения экрана.Как создать пользовательский вид с относительным размером?

Моя идея: создать один пользовательский вид для каждого типа вида, который я использую, и использовать layout_width и layout_height, указанные в XML, в процентах от родительского размера (например, layout_width = "100dp" эквивалентно fill_parent, а layout_width = "50dp" означает, что ширина View будет равна половине родительской).

Вот класс пользовательских TextView я сделал:

public class RSTextView extends TextView { 

    public RSTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int w, int h) { 
     int parentWidth = ((View)this.getParent()).getWidth(); 
     int parentHeight = ((View)this.getParent()).getHeight(); 
     Log.i(null, "Width: " + w + "; Height: " + parentHeight); 
     this.setMeasuredDimension(parentWidth * MeasureSpec.getSize(w)/100, 
       parentHeight * MeasureSpec.getSize(h)/100); 
    } 
} 

Но это не работает. Размер parentWidth и parentHeight всегда равен 0.

Итак, во-первых, это хорошая идея сделать это именно так, или у вас есть идеи по созданию приложения с относительным размером?

И если это правильный путь, как я могу получить размер родителей View из метода onMeasure?

Спасибо!

ответ

2

Поскольку вы проверяете высоту представления во время фазы макета, вы, вероятно, захотите использовать getMeasuredHeight, а не getHeight, но я не уверен, что вам нужно делать то, что вы делаете вообще. Трудно сказать из вашего описания, но, похоже, вы пытаетесь воссоздать поведение весов LinearLayout. Например, если у вас есть горизонтальный LinearLayout с 3 детьми, вы можете легко установить, что первое заняло половину его ширины, а остальные - до 25%, назначив им 0pxlayout_width s и layout_weight s из 2, 1 и 1 соответственно. (или любых других весов этих пропорций).

Если вы решили пойти по пути на заказ View, однако, не перегружать, что layout_height и layout_width делать - атрибуты использовать пользовательские XML принять аргумент для проценты (я копаться в коде LinearLayout «s в см., как реализуется layout_weight).

+0

Спасибо! Ну, проблема в том, что layout_weight работает только с LinearLayout, а не с RelativeLayout. Но я смущен, что лучший способ писать приложения, которые работают с устройствами любого размера? – nbarraille 2010-12-01 14:57:42

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