如何在代码中为组件设置dip,sp值
2013-05-15 13:31
281 查看
转自 http://sunjiwlh.blog.51cto.com/3430901/1159091
通常在android中textview一类的组件设定字体大小,,width,height都是在xml中设置,这个当然大家都是知道的,不过呢咱这里就当复习复习基础了
一.我们先看看要给一个Textview设置大小是16sp/dp/dip该如何做呢?
在android中为一个TextView组件设定字体大小是很容易的,android推荐使用sp作为文字显示的大小单位,因此为一个Textview设置字体大小有以下方式
1.android:textSize="16sp";或者android:textSize="@dimen/txt_size_16"(在values文件夹下中dimens.xml的定义<dimen name="txt_size_16">16sp</dimen>)
2.(假设已定义TextView实例tview)tview.setTextSize(16)或者tview.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
注意:上述列子中TextView的文字最终显示的大小是相同的。tview的setTexView方法就是设置的scaled pixel大小的值,参见api描述: Set the default text size to the given value, interpreted as "scaled pixel" units.
This size is adjusted based on the current density and user font size preference.
二.若是在代码中为组件dp/sp宽高尺寸呢?
在xml中指定组件的宽高很容易,可以使用px,dip(dp),sp等,android推荐使用dp/dip。由于android分辨率和显示屏物理尺寸的差异。我们知道很多时候我们可能需要动态添加一些组件,并为这些组件指定大小,这个大小又还必须在不同分辨率不同尺寸的设备下显示较好的几乎一致的效果,我们该怎么办呢?我想肯定会想着去设置dp/dip/sp值,那么到底如何去设置呢?
我自己有以下方法:
方法:通过查api,我们知道在android内部会使用TypedValue.applyDimension函数将所有单位(sp/dp/dip等)换算成px,所以我们的方法与此有关,首先看看这个转换的方法
所以我们的实现方法当然与此有关了,下面是代码部分:
home.xml
HomeActivity.java
运行截图:
本文出自 “万紫千虹” 博客,请务必保留此出处http://sunjiwlh.blog.51cto.com/3430901/1159091
通常在android中textview一类的组件设定字体大小,,width,height都是在xml中设置,这个当然大家都是知道的,不过呢咱这里就当复习复习基础了
一.我们先看看要给一个Textview设置大小是16sp/dp/dip该如何做呢?
在android中为一个TextView组件设定字体大小是很容易的,android推荐使用sp作为文字显示的大小单位,因此为一个Textview设置字体大小有以下方式
1.android:textSize="16sp";或者android:textSize="@dimen/txt_size_16"(在values文件夹下中dimens.xml的定义<dimen name="txt_size_16">16sp</dimen>)
2.(假设已定义TextView实例tview)tview.setTextSize(16)或者tview.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
此处以TextView为例: 创建一个TextView实例 TextView tview=new TextView(this); Api中设置字体大小的方法 tview.setTextSize(int unit, float size); tview.setTextSize(float size);
注意:上述列子中TextView的文字最终显示的大小是相同的。tview的setTexView方法就是设置的scaled pixel大小的值,参见api描述: Set the default text size to the given value, interpreted as "scaled pixel" units.
This size is adjusted based on the current density and user font size preference.
二.若是在代码中为组件dp/sp宽高尺寸呢?
在xml中指定组件的宽高很容易,可以使用px,dip(dp),sp等,android推荐使用dp/dip。由于android分辨率和显示屏物理尺寸的差异。我们知道很多时候我们可能需要动态添加一些组件,并为这些组件指定大小,这个大小又还必须在不同分辨率不同尺寸的设备下显示较好的几乎一致的效果,我们该怎么办呢?我想肯定会想着去设置dp/dip/sp值,那么到底如何去设置呢?
我自己有以下方法:
方法:通过查api,我们知道在android内部会使用TypedValue.applyDimension函数将所有单位(sp/dp/dip等)换算成px,所以我们的方法与此有关,首先看看这个转换的方法
public static float applyDimension(int unit, float value, DisplayMetrics metrics) { switch (unit) { case COMPLEX_UNIT_PX: return value; case COMPLEX_UNIT_DIP: return value * metrics.density; case COMPLEX_UNIT_SP: return value * metrics.scaledDensity; case COMPLEX_UNIT_PT: return value * metrics.xdpi * (1.0f/72); case COMPLEX_UNIT_IN: return value * metrics.xdpi; case COMPLEX_UNIT_MM: return value * metrics.xdpi * (1.0f/25.4f); } return 0; }
所以我们的实现方法当然与此有关了,下面是代码部分:
home.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="xml中以dp为单位显示" /> <ImageView android:id="@+id/imageView1" android:layout_width="100dip" android:layout_height="100dip" android:layout_marginTop="10dp" android:src="@drawable/a11" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="14dp" android:text="代码动态添加值" /> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:src="@drawable/a11" /> </LinearLayout>
HomeActivity.java
package com.example.aboutexpand; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.util.TypedValue; import android.view.ViewGroup.LayoutParams; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; public class HomeActivity extends Activity { private ImageView imgView1 = null;// xml布局中定义大小宽高为100dip private ImageView imgView2 = null;// 需要动态设置大小,也要为100dip ImageButton imgBtn = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); imgView1 = (ImageView) findViewById(R.id.imageView1); int img1H = imgView1.getDrawable().getIntrinsicHeight(); int img1W = imgView1.getDrawable().getIntrinsicWidth(); imgView2 = (ImageView) findViewById(R.id.imageView2); // 方法一 // imgView2.setLayoutParams(new LinearLayout.LayoutParams( // (int) getRawSize(TypedValue.COMPLEX_UNIT_DIP, 100), // (int) getRawSize(TypedValue.COMPLEX_UNIT_DIP, 100))); // 方法二 imgView2.setLayoutParams(new LinearLayout.LayoutParams( getIntFromDimens(R.dimen.img_height), getIntFromDimens(R.dimen.img_widthe))); int img2H = imgView2.getDrawable().getIntrinsicHeight(); int img2W = imgView2.getDrawable().getIntrinsicWidth(); TextView tview1 = (TextView) findViewById(R.id.textView1); tview1.getText(); tview1.setText(tview1.getText() + "图片h" + img1H + "w" + img1W); TextView tview2 = (TextView) findViewById(R.id.textView2); tview2.setText(tview2.getText() + "图片h" + img2H + "w" + img2W); } // 方法一 public float getRawSize(int unit, float value) { Resources res = this.getResources(); return TypedValue.applyDimension(unit, value, res.getDisplayMetrics()); } // 方法2,需先在values中dimens的进行设置 public int getIntFromDimens(int index) { int result = this.getResources().getDimensionPixelSize(index); return result; } }
运行截图:
本文出自 “万紫千虹” 博客,请务必保留此出处http://sunjiwlh.blog.51cto.com/3430901/1159091
相关文章推荐
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 安卓开发如何通过代码设置组件背景
- 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了
- 如何修改布局组件宽度设置固定值,在代码中动态修改
- Android java如何在代码中为Http连接设置代理
- CEF 如何通过代码设置flash插件路径
- 如何用代码设置滚动条的位置?
- Java 编程下 Eclipse 如何设置单行代码显示的最大宽度
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能?
- Android “设置”应用的各项如何用代码调用的方式打开
- Vue系列: 如何通过组件的属性props设置样式
- phpstorm:如何设置代码自动换行
- Android 如何在代码中将PX转换成DIP
- GStreamer使用playbin,如何给动态生成的source组件设置属性?
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能?