1. 程式人生 > 程式設計 >Android EditText隨輸入法一起移動並懸浮在輸入法之上的示例程式碼

Android EditText隨輸入法一起移動並懸浮在輸入法之上的示例程式碼

好習慣,先上圖

Android EditText隨輸入法一起移動並懸浮在輸入法之上的示例程式碼

今天在做作業的時候有這樣一種需求,評論功能頁面需要仿QQ或者微博類似的頁面佈局,Edittext固定底部,但是又能懸浮在輸入法之上。百度看了好多程式碼,又是寫監聽改變佈局,又是動態調整輸入框的位置,很高階,但是我嘗試都沒有效果,也不知道是我手機的原因還是不會用人家的程式碼,沒辦法,自己動手研究。

研究結果:

一共三個點

1.檔案AndroidManifest.xml裡

當前頁面的activity標籤里加這個

android:windowSoftInputMode="adjustResize"

意思是Activity主視窗總是被調整螢幕的大小以便留出軟鍵盤的空間

例如

<activity android:name=".MainActivity"
 android:windowSoftInputMode="adjustResize">

</activity>

2.佈局裡設定

加如下四句話在你的程式碼裡,至於新增位置,類比上面面的程式碼塊,應該容易懂

(1)RelativeLayout

//根目錄需要相對佈局,其他的沒嘗試

(2)android:fitsSystemWindows="true"

下面這是一位大佬的解釋,我粘過來方便理解

fitsSystemWindows屬性可以讓view根據系統視窗來調整自己的佈局;簡單點說就是我們在設定應用佈局時是否考慮系統窗口布局,這裡系統視窗包括系統狀態列、導航欄、輸入法等,包括一些手機系統帶有的底部虛擬按鍵。

android:fitsSystemWindows=”true” (觸發View的padding屬性來給系統視窗留出空間)這個屬性可以給任何view設定,只要設定了這個屬性此view的其他所有padding屬性失效,同時該屬性的生效條件是隻有在設定了透明狀態列(StatusBar)或者導航欄(NavigationBar)此屬性才會生效

(3)android:layout_marginTop="-25dp" (注意是 負25)

這解釋一下為什麼要加這個,如果你應用的地方不需要沉浸式狀態列,就可以去掉這句

如果你需要的是沉浸式狀態列,上面的android:fitsSystemWindows="true"設定之後你的狀態列就會變成一個白條,原來的效果會失效,我自己的小想法,直接讓根目錄延伸到螢幕頂部,充滿狀態列,完事就可以了,經嘗試發現狀態列高度為25dp,然後讓根佈局往上延伸25dp,

這裡想要延伸到狀態列還是需要讓狀態列透明,才能看見效果,所以在java程式碼裡需要加入一個小改動。

(4)android:layout_alignParentBottom="true"

將需要隨輸入法移動的控制元件固定根佈局底部,究竟為啥,咱嘗試出來的也搞不懂,反正能用

//這裡採用了相對佈局作為根佈局佔滿全屏,其他都沒試過,想要其他佈局直接放到這個裡面,就不多說了
//紅色標記的四個地方要有

<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"
  android:fitsSystemWindows="true"     
  android:layout_marginTop="-25dp"     
  tools:context=".MainActivity">

 //這裡的佈局可以任意,也可以直接是控制元件,但是必須要有android:layout_alignParentBottom="true"固定在父佈局底部
  <RelativeLayout
    android:id="@+id/lookm_bottombar"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:padding="5dp">

    <EditText
      android:id="@+id/lookm_chatedit"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_marginRight="70dp"
      android:padding="5dp"
      android:hint="說點什麼吧"
      android:textSize="13dp"
      android:maxLength="500" />

    <Button
      android:id="@+id/lookm_sendbutton"
      android:layout_width="65dp"
      android:layout_height="40dp"
      android:layout_alignParentRight="true"
      android:text="留言" />

  </RelativeLayout>
</RelativeLayout>

3.java程式碼里加入一個這小方法設定狀態列透明,如果狀態列不透明,那沉浸式狀態列就不起作用了,狀態列會採用應用預設顏色,很不舒服

public class MainActivity extends AppCompatActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 setStatusBar();
 }

 //設定狀態列為透明
 protected void setStatusBar() {
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
 }
 }
}

總結

到此這篇關於Android EditText隨輸入法一起移動並懸浮在輸入法之上的文章就介紹到這了,更多相關Android EditText懸浮在輸入法之上內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!