如何在软键盘输出时更改背景颜色,并在软键盘输入时更改背景颜色

时间:2013-12-22 06:34:46

标签: java android android-layout layout

我正在编写一个Android视图(Android 12)。

我有一个带有editText控件的linearlayout。

我想在软键盘输出时更改linearlayout背景图像,并在隐藏键盘时再次更改。

我试图在每个editText上设置一个焦点监听器,但它无济于事。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这个:

   final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
    Rect r = new Rect();
    //r will be populated with the coordinates of your view that area still visible.
    activityRootView.getWindowVisibleDisplayFrame(r);

    int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
    heightDiff = convertPixelsToDp(heightDiff , this);

    if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
        ... do something here
    }
 }
}); 

this linkthis

中的详情

用于在所有设备中更改heightDiff到dp,并使用它并使用以下方法更改它:

public static float convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / (metrics.densityDpi / 160f);
    return dp;
}

答案 1 :(得分:0)

首先,在布局中添加一个ID:

android:id="@+id/view"

例如:

<LinearLayout
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

然后使用this问题中的此代码来确定软键盘是否可见。您应该将其放在onCreate方法中。

final View root = findViewById(R.id.view);
root.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int heightDiff = root.getRootView().getHeight() - root.getHeight();
        if (heightDiff > 100) { // more than 100 pixels is probably a keyboard
            // keyboard is shown
            layout.setBackground(getResources().getDrawable(R.drawable.idOfPic));
        } else {
            // keyboard is not shown
            layout.setBackground(getResources().getDrawable(R.drawable.otherPic));
        }
    }
});

注意取决于您的布局(根据我自己的经验说),if (heightDiff > 100)可能需要更改。它可能是if (heightDiff > 150)或其他东西;像素高度是任意的。

不幸的是,没有真正的方法来确定软键盘是否可见(荒谬)。这是最好的方法。