Rob*_*hai 37 java layout android
基本上我有这个内部XML,但我必须在代码中重新创建它.我该怎么做?
<EditText
android:layout_width="140dp"
android:layout_height="20dp"
android:background="@drawable/input_bg01"
android:textSize="10dp"
android:gravity="center"
android:text="111-222-333 FOOO" />
Run Code Online (Sandbox Code Playgroud)
我可以使用它来设置文本大小,但layout_width和height呢?
edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉代码使用DP单元而不是像素?或转换功能将DP转换为像素?
小智 86
您可以使用:
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
现在,该值pixels等于10dp设备当前的屏幕密度.
该的TypedValue包含其他类似的方法,在转换帮助.
sve*_*ven 48
解决了这里.
提取:
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
Run Code Online (Sandbox Code Playgroud)
Jul*_*rst 12
只是为了完整性:这里给出了问题的另一个解决方案(我更喜欢)
setTextSize(float)期望缩放的像素值.那么,setTextSize(10)会给你想要的结果.但是,getDimension()并getDimensionPixelSize()以像素为单位返回大小.
所以对于你的例子来说就是这样
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size));
Run Code Online (Sandbox Code Playgroud)
其中,<dimen name="edtxt_text_size">10dp</dimen>在例如你dimens.xml文件设置.
| 归档时间: |
|
| 查看次数: |
46133 次 |
| 最近记录: |