How to prevent Soft Keyboard from resizing background image

前端 未结 12 1761
耶瑟儿~
耶瑟儿~ 2020-12-30 00:09

I have a typical listview with an edittext and a button at the bottom of the activity.

When I click onto the edittext, the sof

相关标签:
12条回答
  • 2020-12-30 00:33

    Go to the Androidmanifest.xml and:

    activity name="activityname" android:windowSoftInputMode="stateVisible|adjustPan"
    
    0 讨论(0)
  • 2020-12-30 00:34

    Use ImageView with fill_parent and centerCrop attributes in RelativeLayout. Like this;

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/yazisma_arka_plan"
            android:scaleType="centerCrop"
            />
        <ListView
            android:id="@+id/messages_view"
            android:layout_width="fill_parent"...
    
    0 讨论(0)
  • 2020-12-30 00:35

    This code doesn't work for me:

    android:windowSoftInputMode="adjustResize"
    

    But this does work:

    android:windowSoftInputMode="adjustPan"
    
    0 讨论(0)
  • 2020-12-30 00:39

    For those who aren't get it:

    double ckeck if your xml already has a @drawable setted (this was the error for me, i was setting via android manifest but it was already setted on the root of xml)

    after that create a theme style with background:

    <style name="AppThemeWBackgroundG" parent="AppTheme">
            <item name="android:windowBackground">@drawable/background_com_gradiente</item>
    </style>
    

    Then in your activity on AndroidManifest.xml:

    <activity
       android:name=".TelaLoginFuncionario"
       android:windowSoftInputMode="adjustResize|stateAlwaysVisible"
       android:theme="@style/AppThemeWBackgroundG"
        android:fitsSystemWindows="true"
    />
    

    and that's it: the activity enter in a screen with the keyboard up, resizing up the items and the background stays at normal size

    0 讨论(0)
  • 2020-12-30 00:40

    Er, let me see ... pictures first!

    The layout file act_login.xml.

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/login_bkgd"
        android:orientation="vertical"
        android:paddingLeft="25dp"
        android:paddingRight="25dp"
        >
    
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:cacheColorHint="#0fff"
            android:scrollbars="none"
            android:listSelector="#0fff"
            android:divider="#0fff"
            android:dividerHeight="0dp"
            android:isScrollContainer="true"
            />
        <!--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-->
        <!--android:isScrollContainer="true"-->
        <!--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-->
    
        <LinearLayout
            android:id="@+id/loginItem"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            >
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:orientation="vertical"
                >
    
                <ImageView
                    android:id="@+id/loginLogo"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="35dp"
                    android:layout_marginTop="35dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/logo"
                    />
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:paddingBottom="35dp"
                    >
    
                    <View
                        android:layout_width="0dp"
                        android:layout_height="1px"
                        android:layout_weight="1"
                        android:background="#Ffff"
                        />
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="6dp"
                        android:layout_marginRight="6dp"
                        android:text="WELCOME"
                        android:textColor="#Ffff"
                        android:textSize="14sp"
                        />
    
                    <View
                        android:layout_width="0dp"
                        android:layout_height="1px"
                        android:layout_weight="1"
                        android:background="#Ffff"
                        />
                </LinearLayout>
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                >
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:background="@drawable/login_et_long"
                    android:gravity="center"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    >
    
                    <TextView
                        android:layout_width="60dp"
                        android:layout_height="wrap_content"
                        android:background="@null"
                        android:text="账号:"
                        android:textColor="#Ffff"
                        android:textSize="16sp"
                        />
    
                    <EditText
                        android:id="@+id/loginUsername"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@null"
                        android:hint="请输入手机号"
                        android:imeOptions="actionNext"
                        android:inputType="text"
                        android:singleLine="true"
                        android:textColor="#F000"
                        android:textSize="16sp"
                        />
                </LinearLayout>
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:layout_marginBottom="45dp"
                    android:layout_marginTop="10dp"
                    android:background="@drawable/login_et_long"
                    android:gravity="center"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    >
    
                    <TextView
                        android:layout_width="60dp"
                        android:layout_height="wrap_content"
                        android:background="@null"
                        android:text="密码:"
                        android:textColor="#Ffff"
                        android:textSize="16sp"
                        />
    
                    <EditText
                        android:id="@+id/loginPassword"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@null"
                        android:hint="请输入密码"
                        android:imeOptions="actionGo"
                        android:inputType="textPassword"
                        android:singleLine="true"
                        android:textColor="#F000"
                        android:textSize="16sp"
                        />
                </LinearLayout>
    
                <TextView
                    android:id="@+id/login"
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:background="@drawable/login_button"
                    android:gravity="center"
                    android:padding="10dp"
                    android:text="@string/str_login"
                    android:textColor="#Ffff"
                    android:textSize="19sp"
                    />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
    

    The related Java codes.

    EditText etUsername, etPassword;
    EditText etFocus;
    ViewGroup base;
    int mSelection;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        base=(ViewGroup)getLayoutInflater().inflate(R.layout.act_login, null);
        setContentView(base);
        getWindow().setBackgroundDrawable(base.getBackground());
        base.setBackground(null);
        super.onCreate(savedInstanceState);
    }
    
    @Override
    protected void initViews() {
        etUsername=(EditText)findViewById(R.id.loginUsername);
        etPassword=(EditText)findViewById(R.id.loginPassword);
    
        final ViewGroup item=(ViewGroup)findViewById(R.id.loginItem);
        base.removeView(item);
        final View[] items=new View[item.getChildCount()];
        for(int i=0; i<item.getChildCount(); i++) items[i]=item.getChildAt(i);
        item.removeAllViews();
    
        ListView lv=(ListView)base.getChildAt(0);
        lv.setAdapter(new BaseAdapter() {
        public View getView(int i, View v, ViewGroup vg) {
            if(etFocus!=null && getCurrentFocus()!=etFocus){
                etFocus.requestFocus();
                etFocus.setSelection(mSelection);
                //etFocus=null;
            }
            return items[i];
        }
        public int getCount() {return items.length;}
        public Object getItem(int position) {return null;}
        public long getItemId(int position) {return 0;}
        });
    
        /*View.OnTouchListener listener=new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent e) {
                if(e.getAction()!=MotionEvent.ACTION_UP) return false;
                etFocus=(EditText)v;
                mSelection=etFocus.getSelectionEnd();
                ZZ.z("_________________ mSelection="+mSelection);
                return false;
            }
        };
        etUsername.setOnTouchListener(listener);
        etPassword.setOnTouchListener(listener);*/
    
        View.OnFocusChangeListener listener1=new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(!hasFocus){
                    etFocus=(EditText)v;
                    mSelection=etFocus.getSelectionStart();
                    ZZ.z("_________________ mSelection="+mSelection);
                }
            }
        };
        etUsername.setOnFocusChangeListener(listener1);
        etPassword.setOnFocusChangeListener(listener1);
    }
    

    The AndroidManifest part.

        <activity
            android:name=".ui.activity.ActLogin"
            android:label="@string/str_login"
            android:theme="@style/myTheme"
            />
        <!--android:windowSoftInputMode="adjustResize"-->
    

    The style part.

    <style name="myTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
    
    0 讨论(0)
  • 2020-12-30 00:43

    for listview you need to use

    android:isScrollContainer="false"
    

    and add this to your activity in manifest.xml

    android:windowSoftInputMode="adjustPan"
    
    0 讨论(0)
提交回复
热议问题