LinearLayout的边距,用dp编程
是否有可能设置一个LinearLayout的边距,以编程方式但不是像素,但dp?
您可以使用DisplayMetrics并确定屏幕密度。 像这样的东西:
int dpValue = 5; // margin in dips float d = context.getResources().getDisplayMetrics().density; int margin = (int)(dpValue * d); // margin in pixels
正如我记得,最好使用地板偏移和宽度的圆化。
我有同样的问题,并使用这种技术来解决它:
首先,我将一个xml文件添加到我的res / values文件夹(名为dimensions.xml)中。 它看起来像这样:
<?xml version="1.0" encoding="utf-8" ?> <resources> <dimen name="my_margin">5dip</dimen> </resources>
其次,在我的代码中,我得到的像素相当于边距如下(注意我使用Xamarin,所以这是C#代码,但纯Java版本应该是非常相似的):
int myMarginPx = Resources.GetDimensionPixelSize(Resource.Dimension.my_margin);
最后,我创build了我的布局参数:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent); layoutParams.SetMargins(myMarginPx, myMarginPx, myMarginPx, myMarginPx);
您可以将dp转换为px,例如将5dp转换为px:
Resources r = mContext.getResources(); int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, r.getDisplayMetrics());
以下方法适用于将像素转换为dp:
int pixelToDP(int pixel) { final float scale = RaditazApplication.getInstance().getResources().getDisplayMetrics().density; return (int) ((pixel * scale) + 0.5f); }
将DP转换为像素值
int Whatever_valueInDP=10;//value in dp int Value_In_Pixel= (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, Whatever_valueInDP, getResources() .getDisplayMetrics());
- MediaController定位在VideoView上
- Android的EditText提示大小
- 使用Android获取电话国家代码
- 如何从最近的应用列表中删除应用程序?
- Android Studio卡在“Gradle:解决依赖关系_debugCompile”或“detachedConfiguration1”
- 为什么要使用armeabi-v7a代码覆盖armeabi代码?
- 更新到Android构build工具后的IncompatibleClassChangeError 25.1.6 GCM / FCM
- Android,在与ImageView的图像相同的URL上制作图像
- 如何在每个Android应用程序/进程中使用多个MapActivities / MapViews