如何在代码中为组件设置dip,sp值
2013-10-10 12:56
281 查看
通常在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://sunjilife.blog.51cto.com/3430901/1159091
一.我们先看看要给一个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://sunjilife.blog.51cto.com/3430901/1159091
相关文章推荐
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 如何在代码中为组件设置dip,sp值
- 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了
- 如何修改布局组件宽度设置固定值,在代码中动态修改
- 安卓开发如何通过代码设置组件背景
- 如何设置单词字体间距 css设置字体间距样式代码
- iOS开发代码如何跳转到系统的设置的无线局域网位置。
- 如何在代码中动态设置java_library_path?
- myeclipse 代码提示功能如何设置?
- Android Studio如何设置代码自动提示
- 【AndroidStudio】如何设置代码自动提示
- Android Studio如何设置自己主动提示代码
- 设置组件状态--如何动态关闭manifest中的Receiver
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能?
- 如何设置Eclipse中的每一行容纳的代码数 字节数
- [makefile]如何设置不同目录的代码(.c),生成到指定目录下(./debug/.o))