不同设备或模拟器上的EditText处于不同的位置

时间:2015-10-01 20:39:34

标签: android android-edittext alignment

我使用下面的代码作为弹出警告框,其中包含EditText。我使用保证金来对齐下面代码中的EditText。问题是我用于一个设备或仿真器的边距数将在其他设备或仿真器上关闭。如果我正确对齐一个设备,它将在另一个设备上查看。任何帮助表示赞赏。

AlertDialog.Builder aBuilder = new      AlertDialog.Builder(ExpenseSheet.this);
    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    params.setMargins(85, 0, 50, 0);
    // Set up the input
    final EditText input = new EditText(ExpenseSheet.this);
    //FOCUSING ON POPUP WINDOW TEXT
    input.requestFocus();
    layout.addView(input, params);

    // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
    input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
    //limiting the amount of characters
    input.setFilters(new InputFilter[]{new InputFilter.LengthFilter(8)});
    aBuilder.setView(layout);

1 个答案:

答案 0 :(得分:0)

问题在于您使用硬编码数字作为边距,默认情况下表示像素。根据屏幕密度,这个像素数可以在设备上转换为更长或更短的实际长度。

你应该尝试将这些值乘以屏幕密度,以使它们在各种屏幕密度的设备中保持不变。

示例:

 final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
 final float screenDensity = metrics.density;
 double mWidth = 25 * screenDensity;// constant width across densities
 double mHeight = 30 * screenDensity;// constant height across densities

现在您可以使用这些变量而不是硬编码值来在各种屏幕密度下获得统一的效果。