android控件根据屏幕大小自适应
2014-07-01 20:12
633 查看
在开发android项目的时候,我们常常会考虑这样的问题:为不同的手机屏幕显示出最佳的界面,以提升用户的体验。不例外的我这次的项目开发也要考虑这个问题,由于之前都没有做过相关的开发,所以首先就是到网上寻找资料,无果。网上找的都是让手机根据不同的屏幕来选择不同的layout文件来达到不同的显示效果,但是无疑的,这给软件安装包和开发人员增加了负担,最后我想到了能不能让activity去检测屏幕的大小,然后再设置它内部的控件呢(当然这些控件和布局是来自于同一个Layout文件)?事实证明了我这种想法的可行性,下面就贴出这部分代码,以供参考:
读取XML布局文件的方式
自定义的方式
当然,如果想完全控制控件的位置,可用使用绝对布局absolutelyLayout;
在代码中设置控件位置的代码如下(这个是网上找的+)
当然,上面所说的只是一个简单的例子,在实际项目过程中,我们还会担心这样的问题,我们得为每一个界面设置一个界面重新计算的方法,来给每个界面重新匹配屏幕,这样依然是相当的耗时耗力的(不断的findviewbyId我觉得是繁琐的,而且是易错不易维护的)。我在想,既然都是做同样一种工作,能不能抽象出来,统一处理呢?我们能不能让每个页面都调用一个统一的方法来重新生成界面?当然可以了。这就是要对架构进行优化、这就是设计模式啊!!!那怎么样才能做到呢?我们又要用到反射了
这里提供一种方法来获得所有的控件,当然控件的类型我们可用想想能不能也通过反射来获得,这样我们就可用完全依据layout文件来区别,用一个抽象的方法来隔离所有差异了。【我还在研究,研究完成之后贴上】
读取XML布局文件的方式
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button bt; Button bt2; Button bt3; Button bt4; bt=(Button)findViewById(R.id.button1); bt2=(Button)findViewById(R.id.button2); bt3=(Button)findViewById(R.id.button3); bt4=(Button)findViewById(R.id.button4); Display display = this.getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height=display.getHeight(); bt.setHeight((int) ((height)*0.2)); bt2.setHeight((int) ((height)*0.3)); bt3.setHeight((int) ((height)*0.3)); bt4.setHeight((int) ((height)*0.2)); }
自定义的方式
private void setByMe() { Display display = this.getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height=display.getHeight(); //TableLayout tab = new TableLayout(this); LinearLayout tab=new LinearLayout(this); tab.setOrientation(LinearLayout.VERTICAL); for(int i =0;i<12;i++){ //TableRow tr = new TableRow(this); TextView tv = new TextView(this); tv.setText("ssss"+i); tv.setWidth((int) ((width)*0.3)); tv.setHeight((int) ((height)*0.1)); EditText et = new EditText(this); et.setWidth((int) ((width)*0.7)); et.setHeight((int) ((height)*0.1)); // tr.addView(tv); // tr.addView(et); et.setText(i+""); tab.addView(et); } setContentView(tab); }
当然,如果想完全控制控件的位置,可用使用绝对布局absolutelyLayout;
在代码中设置控件位置的代码如下(这个是网上找的+)
得到屏幕窗口大小 // get the window resolution private static DisplayMetrics dm; private static int m_dispWidth; private static int m_dispHeight;dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); m_dispWidth = dm.widthPixels; m_dispHeight = dm.heightPixels; 调整控件位置和大小: private EditText et_longitude; AbsoluteLayout.LayoutParams lp;lp = new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0, 0);lp.x = x; lp.y = y; lp.height = m_etHeight; lp.width = m_etWidth; et_longitude.setLayoutParams(lp);设置控件显示字体大小:(list 不可用这种方法) et_longitude.setTextSize(TEXT_SIZE);
当然,上面所说的只是一个简单的例子,在实际项目过程中,我们还会担心这样的问题,我们得为每一个界面设置一个界面重新计算的方法,来给每个界面重新匹配屏幕,这样依然是相当的耗时耗力的(不断的findviewbyId我觉得是繁琐的,而且是易错不易维护的)。我在想,既然都是做同样一种工作,能不能抽象出来,统一处理呢?我们能不能让每个页面都调用一个统一的方法来重新生成界面?当然可以了。这就是要对架构进行优化、这就是设计模式啊!!!那怎么样才能做到呢?我们又要用到反射了
super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout ll = (LinearLayout)findViewById(R.id.LinearLayout01); for (int i = 0; i < ll.getChildCount(); i++) { ((TextView) ll.getChildAt(i)).setText("Text View " +i); }
根据控件名获得控件的id int id = R.id.class.getField("s" + i).getInt(0);
这里提供一种方法来获得所有的控件,当然控件的类型我们可用想想能不能也通过反射来获得,这样我们就可用完全依据layout文件来区别,用一个抽象的方法来隔离所有差异了。【我还在研究,研究完成之后贴上】
相关文章推荐
- android控件根据屏幕大小自适应
- android控件根据屏幕大小自适应 分类: Android界面和组件 2014-07-01 20:12 94人阅读 评论(0) 收藏
- Android 简单的弹出框(在屏幕中间,传string[],根据内容框框大小自适应)
- android 简单的弹出框(在屏幕中间,传string[],根据内容框框大小自适应)
- android 控件的大小计算以及自适应屏幕的大小
- iOS UILabel根据字数自适应宽高以及控件按屏幕大小按比例缩放
- Android控件自适应屏幕大小
- android自适应屏幕方向和大小
- Android自适应屏幕方向、大小和分辨率
- Android 根据屏幕大小设置字体
- Android屏幕大小,翻转,控件居中相关技巧
- android自适应屏幕方向和大小
- Android自适应屏幕大小和layout布局(横屏|竖屏)
- Android 根据屏幕大小设置字体
- Android 根据屏幕大小设置字体
- android自适应屏幕方向\大小\分辨率
- Android自适应屏幕大小和layout布局(横屏|竖屏)
- Android自适应屏幕方向、大小和分辨率
- Android 根据屏幕大小设置字体
- [android UI]应用程序自适应屏幕大小