我們經常玩QQ、微信,大家是否認真看過它們的聊天介面,它們的輸入框既可以隨軟鍵盤高度變化,又可以隨底部控制元件的高度變化,而且底部控制元件還可以隨軟鍵盤高度的調整而自動調整(只不過設定了最小、最大值),看上去是不是覺得很酷呢?今天,我就在這介紹一個比它還好用的控制元件--SoftLinearLayout。
首先,我們來看一下效果演示圖:
接下來,我們講解一下控制元件功能及其使用:
1.功能
底部控制元件隨輸入法高度變化而變化,比QQ聊天介面更完美。
2.Android Studio使用方法
dependencies{
compile 'com.wkp:SoftLinearLayout:1.0.1'
//Android Studio3.0+可用以下方式
//implementation 'com.wkp:SoftLinearLayout:1.0.1'
}
複製程式碼
3.使用詳解
- 屬性講解
<!--可變高度的極限小高度-->
<attr name="wkp_minHeight" format="integer"/>
<!--可變高度的極限大高度-->
<attr name="wkp_maxHeight" format="integer"/>
<!--顯示軟鍵盤時的動畫時長-->
<attr name="wkp_showSoftDuration" format="integer"/>
<!--開關底部佈局時的動畫時長-->
<attr name="wkp_toggleDuration" format="integer"/>
複製程式碼
- 佈局示例
<?xml version="1.0" encoding="utf-8"?>
<com.wkp.softlinearlayout.view.SoftLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/sll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_top"
android:orientation="vertical"
android:background="@android:color/holo_blue_bright"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
<ListView
android:id="@+id/lv"
android:stackFromBottom="true"
android:transcriptMode="normal"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>
<EditText
android:hint="你好"
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="確定"
android:onClick="sure"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_bottom"
android:orientation="vertical"
android:gravity="center"
android:background="@android:color/holo_green_dark"
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:gravity="center"
android:text="底部"
android:textColor="@android:color/white"
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</com.wkp.softlinearlayout.view.SoftLinearLayout>
複製程式碼
- 程式碼示例
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public class MainActivity extends AppCompatActivity {
private SoftLinearLayout mSll;
private String[] mStrings = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("\\B");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = findViewById(R.id.lv);
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings));
mSll = findViewById(R.id.sll);
//設定開關改變監聽
mSll.setOnToggleChangedListener(new SoftLinearLayout.OnToggleChangedListener() {
@Override
public void onToggleChanged(boolean isToggle) {
Log.d("MainActivity", "isToggle:" + isToggle);
}
});
}
//點選開/關
public void sure(View view) {
mSll.toggle();
}
}
複製程式碼
結語
控制元件支援直接程式碼建立,還有更多API請觀看SoftLinearLayout.java內的註釋說明。
歡迎大家使用Github地址,感覺好用請給個Star鼓勵一下,謝謝!
大家如果有更好的意見或建議以及好的靈感,請郵箱作者,謝謝!
QQ郵箱: 1535514884@qq.com
163郵箱: 15889686524@163.com
Gmail郵箱: wkp15889686524@gmail.com