如何以编程方式在 dp 中设置 EditText 上边距?
Posted
技术标签:
【中文标题】如何以编程方式在 dp 中设置 EditText 上边距?【英文标题】:how to set EditText TopMargins in dp programatically? 【发布时间】:2014-01-12 17:43:44 【问题描述】:在我的 android 应用程序中,我想更改 editText 的 topMargin。
问题是我想改变它“dp”明智而不是像素明智。
我只想更改 topMaring。让另一个保持原样。不将它们设置为零?
以编程方式我只能在 int 中设置边距?
【问题讨论】:
【参考方案1】:设置如下代码:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(0, convertPixelsToDp(5,this), 0, 0);
editText.setLayoutParams(lp);
和convert Pixels To Dp
public static int convertPixelsToDp(float px, Context context)
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
int dp = px / (metrics.densityDpi / 160f);
return dp;
使用跟随代码只更改一个。
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.topMargin = convertPixelsToDp(5,this);
editText.setLayoutParams(params);
【讨论】:
如果我只想更改 topMaring。让另一个保持原样。不将它们设置为零? 以编程方式我只能在 int 中设置边距? 查看我的编辑,获取您的Layout Params
并设置为您的EditText
。
是的,在这里也找到了一个例子:androidxref.com/4.4.4_r1/xref/packages/apps/Nfc/src/com/android/…【参考方案2】:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(left, top, right, bottom);
editText.setLayoutParams(lp);
【讨论】:
这将有助于为您的答案添加解释。【参考方案3】:您不能以编程方式直接使用 dp 设置边距,因为.setMargins
方法要求像素不是 dp,所以如果您想给出 dp 而不是像素,您应该将 dps 转换为像素。
首先创建 LayoutParams 实例:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
然后将convert dp设置为像素并设置布局的边距,如下所示:
lp.setMargins(left, dpToPx(30), right, bottom);
youredittext.setLayoutParams(lp);
这是像素到dp和dp到像素的转换方法:
public static int dpToPx(int dp)
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
public static int pxToDp(int px)
return (int) (px / Resources.getSystem().getDisplayMetrics().density);
干杯,
哈马德
【讨论】:
【参考方案4】:这是我在 zxing 生成的条形码旁边显示的代码:
final TextView ticketCodeTV = (TextView) dialogView.findViewById(R.id.ticketCodeTV);
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.rightMargin = -(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 135, getResources().getDisplayMetrics());
lp.topMargin = Math.round((size.y / 2) - (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90, getResources().getDisplayMetrics()));
Log.d("rightMargin", Integer.toString(lp.rightMargin));
ticketCodeTV.setLayoutParams(lp);
ticketCodeTV.setText(promo.getTicketCode());
在布局xml中添加:
<RelativeLayout
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_centerVertical="true">
<TextView
android:layout_
android:layout_
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=""
android:background="#ffff"
android:textColor="#000000"
android:layout_marginBottom="20dp"
android:rotation="-90"
android:textSize="25sp"
android:textStyle="normal"
android:paddingLeft="70dp"
android:paddingRight="70dp"
android:id="@+id/ticketCodeTV"
/>
</RelativeLayout>
【讨论】:
以上是关于如何以编程方式在 dp 中设置 EditText 上边距?的主要内容,如果未能解决你的问题,请参考以下文章