有这样一个问题,要做一个程序自适应所有分辨率。为了美观我在布局里设置了背景<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/beijing"
android:baselineAligned="false"
android:orientation="vertical" >在背景里我规划了大致的控件布局位置,然后我就通过设置控件位置的方式将控件放置在背景预先规划好的位置上<Button
android:id="@+id/search_barcode_html_btn"
android:layout_width="80dip"
android:layout_height="40dip"
android:layout_marginLeft="460dip"
android:layout_marginTop="320dip"
android:text="查 询" >
</Button>这样问题就来了,尽管我是用dip这个单位来设置控件位置的,但是如果分辨率改变的话,控件就跑到别的地方去了,而不是我规划到的位置了。
不知道大家在设置背景,控件布局适应不通分辨率方面是怎么解决的。
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/beijing"
android:baselineAligned="false"
android:orientation="vertical" >在背景里我规划了大致的控件布局位置,然后我就通过设置控件位置的方式将控件放置在背景预先规划好的位置上<Button
android:id="@+id/search_barcode_html_btn"
android:layout_width="80dip"
android:layout_height="40dip"
android:layout_marginLeft="460dip"
android:layout_marginTop="320dip"
android:text="查 询" >
</Button>这样问题就来了,尽管我是用dip这个单位来设置控件位置的,但是如果分辨率改变的话,控件就跑到别的地方去了,而不是我规划到的位置了。
不知道大家在设置背景,控件布局适应不通分辨率方面是怎么解决的。
可以用与密度无关的单位:dp 试试。
android:id="@+id/search_barcode_html_btn"
android:layout_width="80dip"
android:layout_height="40dip"
android:layout_marginLeft="460dip"
android:layout_marginTop="320dip"
android:text="查 询" >
</Button>把上面用到的这些值在dimen.xml文件中定义, 然后放在不同分辨率对应的value文件夹中(不同的文件夹中的dimen值可能不同), 比如value-hdpi, value-xhdpi中
不可能每个分辨率都做一个吧,如果客户再拿来第3个第4个型号的怎么办呢
value-xhdpi-1024*768
各建一个文件夹,这样子适配。
如果不需要那么精确就只要一个value-xhdpi文件件,这样子大致是相似的
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm); dm.heightPixels 和 dm.widthPixels可以获得当前的摄像头的分辨率(宽和高)
在用到该控件的java文件中调用这个方法,获取好宽和高,然后定义控件,在java文件中根据获取的宽和高设置控件的位置。
Button btn1;
btn1=(Button) findViewById(R.id.search_barcode_html_btn);
btn1.setPadding(left, top, right, bottom);这里你可以根据自己的需求设置left和top的值,让他们根据dm.heightPixels 和 dm.widthPixels取值。如btn1.setPadding(dm.widthPixels/5,dm.heightPixels/4,0,0).如此设置即可将该控件设为距左5分之一的屏幕宽度,距上4分之一的屏幕高度。自己根据需求调试到最佳就行了。
layout-xhdpi-1024*768
•hdpi 里面存放高分辨率的图片,如 WVGA (480x800),FWVGA (480x854) ;
•mdpi 里面存放中等分辨率的图片,如 HVGA (320x480) ;
•ldpi 里面存放低分辨率的图片,如 QVGA (240x320) 。
目前最为推荐的Android多屏幕自适应解决方案。
该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。其值越小,则对应的layout_width或layout_height的优先级就越高,一般横向布局中,决定的是layout_width的优先级;纵向布局中,决定的是layout_height的优先级。
传统的layout_weight使用方法是将当前控件的layout_width和layout_height都设置成fill_parent,这样就可以把控件的显示比例完全交给layout_weight;这样使用的话,就出现了layout_weight越小,显示比例越大的情况。不过对于2个控件还好,如果控件过多,且显示比例也不相同的时候,控制起来就比较麻烦了,毕竟反比不是那么好确定的。