在方向改变编程调整大小的EditText(Programmatically resizing Edi

2019-10-16 17:51发布

我试图以编程方式调整大小EditText时的手机的方向变化,这是我到目前为止有:

private final float editTextWidthLandscap = 380;
private final float editTextWidthPortrait = 220;

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Resources r = getResources();
    float px;
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, editTextWidthLandscap, r.getDisplayMetrics());
        input.setWidth((int) px); // input is an EditText 
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, editTextWidthPortrait, r.getDisplayMetrics());
        input.setWidth((int) px);  // input is an EditText
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

我也有这个在我的清单文件(如果它的事项):

    <activity
        android:name=".Results"
        android:configChanges="keyboardHidden|orientation"
        android:theme="@android:style/Theme.NoTitleBar"
        android:windowSoftInputMode="stateHidden" >
    </activity>

奇怪的是,它显示了Toast就好了,但似乎忽略input.setWidth()语句。 如果任何人都可以解释为什么EditText没有被调整和/或给我指针,以我怎么会能够正确这也将不胜感激。

编辑:

这是其中的EditText所在的XML文件的一部分

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="80dp"
    android:background="@color/purple"
    android:gravity="center_horizontal|center_vertical"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/input"
        android:layout_width="220dp"
        android:layout_height="50dp"
        android:background="@drawable/search_bar"
        android:hint="@string/input_hint"
        android:inputType="text|textNoSuggestions"
        android:maxLines="1"
        android:minHeight="50dp"
        android:minWidth="220dp"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:textColor="@color/black_grey"
        android:textSize="16.67sp" />

    <Button
        android:id="@+id/search_button"
        android:layout_width="65dp"
        android:layout_height="50dp"
        android:background="@drawable/search_button" />
</LinearLayout>

编辑2:(溶液)

我仍然不知道什么input.setWidth()正是这么做,但我发现我不得不使用LayoutParams此问题。 下面是现在正在为我的代码:

    private final float editTextWidthLandscap = 380;
    private final float editTextWidthPortrait = 220;
    private final float editTextHeight = 50;

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Resources r = getResources();
        float widthpx;
        float heightpx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, editTextHeight, r.getDisplayMetrics());;
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            widthpx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, editTextWidthLandscap, r.getDisplayMetrics());
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((int) Math.round(widthpx), (int) Math.round(heightpx));
            trademarkTextfield.setLayoutParams(lp);
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            widthpx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, editTextWidthPortrait, r.getDisplayMetrics());
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((int) Math.round(widthpx), (int) Math.round(heightpx));
            trademarkTextfield.setLayoutParams(lp);
        }
    }

Answer 1:

根据我自己的经验,有时我们往往overthink对不良行为的原因。 我发现不止一次说的事情,我认为理所当然,不是这样。

您应该检查这两个案件的PX说法是真的不同。 我知道这是一个基础,但也许applyDimension不工作,你想到还是有其他地方定义一些最小宽度的方式,你只需点击它。

你也应该调用getWidth()的调用之前和之后setWidth() 为什么? 因为也许功能是否工作正常,系统确实觉得宽度haschanged,问题不在于此。



Answer 2:

我不知道是什么原因大小心不是编程方式更改,但是,您可以改为要使用风景模式不同的布局文件。 只要创建一个名为“布局 - 土地”的新文件夹,并把你的layout.xml文件在那里(具有相同的ID和文件名),并相应地改变大小。

这可能不是根据你的情况,但它只是另一种选择这个最佳的解决方案...



文章来源: Programmatically resizing EditText on orientation change