布局上移但两,軟鍵盤遮擋問題

廢話少說,上圖看效果

美騎 ![登錄](http://upload-images.jianshu.io/upload_images/3412698-55f2c7b266656f04.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

為什么是美騎呢供置,呃·········我不是美騎網(wǎng)的··········
因?yàn)槲易约旱淖鐾炅私飨妫瑳]有反面例子,剛好在桌面看到了這個(gè)芥丧,所以不好意思辣紧阔,這就是典型的反面例子,不過美騎也別傷心嘛续担,起碼我給你們打廣告了

當(dāng)我點(diǎn)擊手機(jī)那里輸入的時(shí)候擅耽,軟鍵盤彈出,擋住了登錄按鈕物遇,這是對(duì)用戶體驗(yàn)造成很不好的影響········

所以客戶發(fā)現(xiàn)了這個(gè)問題乖仇,要求我們的應(yīng)用要改,要有微信的效果

微信的效果是什么询兴,就是輸入的時(shí)候整個(gè)布局會(huì)上移乃沙,露出登錄的按鈕····

微信.png

話說微信也只是最后一個(gè)才會(huì)彈上去,其他的不會(huì)

客戶輕飄飄的一句話說的簡(jiǎn)單诗舰,改起來··········

其實(shí)我一開始認(rèn)為也很簡(jiǎn)單的警儒,在manifest里面加個(gè)軟件盤的參數(shù)嘛
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

然而發(fā)現(xiàn)沒卵用

百度一下,用ScrollView就好始衅,用了冷蚂,結(jié)果不會(huì)彈上去缭保,各種問題

把按鈕放ScrollView外面,會(huì)彈了蝙茶,但是不美觀艺骂,下面空出一大片······

好了那只能手動(dòng)彈吧

然后ScrollView有個(gè)方法叫 fullScroll 用法就是
mScrollView.fullScroll(ScrollView.FOCUS_DOWN);

作用就是直接滑動(dòng)到底部·······

本來沒啥問題,問題就是一調(diào)用這個(gè)方法Editext的焦點(diǎn)啊隆夯,焦點(diǎn)也自動(dòng)滑動(dòng)到下面了钳恕,導(dǎo)致賬戶名那里根本選擇不了·······

為了調(diào)出這個(gè)bug也是千辛萬苦啊,說多了都是淚·········

后來只能用scrollTo了蹄衷,簡(jiǎn)單忧额,粗暴·····

算了,上面都是坑愧口,直接講實(shí)現(xiàn)吧:

    //鍵盤不遮擋按鈕
    private void setScroll() {
        KeyboardUtil.assistActivity(this, R.id.scroll_view);       //這個(gè)是別人給我的工具類睦番,只用這個(gè)會(huì)有

        parent.setOnTouchListener(new View.OnTouchListener() {                 //parent為Editext外面那層布局
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                parent.setFocusable(true);
                parent.setFocusableInTouchMode(true);
                parent.requestFocus();
                InputMethodManager imm = (InputMethodManager) LoginActivity.this
                        .getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(account.getWindowToken(), 0);  //隱藏鍵盤,account為Editext耍属,隨便一個(gè)就好
                return false;
            }
        });

        scroll.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {         //scroll為parent外面那層布局()最好用NestedScrollView托嚣,ScrollView會(huì)有版本問題
            @Override
            public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                v.scrollTo(0,450);     //這個(gè)是滑動(dòng)距離,隨便大一點(diǎn)就好
            }
        });
    }

繼續(xù)上工具類:

public class KeyboardUtil {
    private static final String TAG = "KeyboardUtil";
    // For more information, see
    // https://code.google.com/p/android/issues/detail?id=5497
    // To use this class, simply invoke assistActivity() on an Activity that
    // already has its content view set.

    public static void assistActivity(Activity activity, int viewId) {
        new KeyboardUtil(activity, viewId);
    }

    private View mChildOfContent;
    private NestedScrollView mScrollView;
    private RelativeLayout.LayoutParams relativeLayoutParams;

    private KeyboardUtil(Activity activity, int viewId) {
        FrameLayout content = (FrameLayout) activity
                .findViewById(android.R.id.content);
        mChildOfContent = content.getChildAt(0);
        mScrollView = (NestedScrollView) content.findViewById(viewId);
        mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        possiblyResizeChildOfContent();
                    }
                });
    }

    private void possiblyResizeChildOfContent() {
        int contentHeight = mChildOfContent.getRootView().getHeight();
        int curDisplayHeight = computeUsableHeight();
            if (contentHeight - curDisplayHeight > contentHeight / 4) {
                Log.e(TAG, "possiblyResizeChildOfContent: 1" );
                mScrollView.scrollTo(0,600);
//                mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
            } else {
                Log.e(TAG, "possiblyResizeChildOfContent: 2" );
            }
    }

    /**
     * 獲取屏幕可顯示區(qū)域高度
     *
     * @return
     */
    private int computeUsableHeight() {
        Rect r = new Rect();
        mChildOfContent.getWindowVisibleDisplayFrame(r);
        return r.height();
    }
}

想了想還是把布局寫出來吧

<LinearLayout

··········

<android.support.v4.widget.NestedScrollView
android:id="@+id/scroll_view"

<LinearLayout
android:id="@+id/ll_parent"

<EditText/>

<EditText/>

</LinearLayout>

</android.support.v4.widget.NestedScrollView>

</LinearLayout>


大概就是這樣的



好歹也坑了我那么久厚骗,必須寫出來示启,你們別踩就好~


或者有更好的辦法,告訴我一下唄领舰,我寫完都覺得這種方法好粗暴啊夫嗓,哈哈哈~


















·
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市冲秽,隨后出現(xiàn)的幾起案子舍咖,更是在濱河造成了極大的恐慌,老刑警劉巖劳跃,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谎仲,死亡現(xiàn)場(chǎng)離奇詭異浙垫,居然都是意外死亡刨仑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門夹姥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杉武,“玉大人,你說我怎么就攤上這事辙售∏岜В” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵旦部,是天一觀的道長(zhǎng)祈搜。 經(jīng)常有香客問我较店,道長(zhǎng),這世上最難降的妖魔是什么容燕? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任梁呈,我火速辦了婚禮,結(jié)果婚禮上蘸秘,老公的妹妹穿的比我還像新娘官卡。我一直安慰自己,他們只是感情好醋虏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布寻咒。 她就那樣靜靜地躺著,像睡著了一般颈嚼。 火紅的嫁衣襯著肌膚如雪毛秘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天阻课,我揣著相機(jī)與錄音熔脂,去河邊找鬼。 笑死柑肴,一個(gè)胖子當(dāng)著我的面吹牛霞揉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晰骑,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼适秩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了硕舆?” 一聲冷哼從身側(cè)響起秽荞,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抚官,沒想到半個(gè)月后扬跋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凌节,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年钦听,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倍奢。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朴上,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卒煞,到底是詐尸還是另有隱情痪宰,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站衣撬,受9級(jí)特大地震影響乖订,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜具练,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一垢粮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靠粪,春花似錦蜡吧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至畔乙,卻和暖如春君仆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牲距。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工返咱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牍鞠。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓咖摹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親难述。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萤晴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容