底部控件随输入法高度变化而变化,比QQ聊天界面更完美
dependencies{
compile 'com.wkp:SoftLinearLayout:1.0.3'
//Android Studio3.0+可用以下方式
//implementation 'com.wkp:SoftLinearLayout:1.0.3'
}
//如集成失败或不愿意等待,请加上我的maven仓库地址
maven { url "https://dl.bintray.com/wkp/maven" }
Note:可能存在Jcenter还在审核阶段,这时会集成失败!
属性讲解
<!--可变高度的极限小高度-->
<attr name="wkp_minHeight" format="integer"/>
<!--可变高度的极限大高度-->
<attr name="wkp_maxHeight" format="integer"/>
<!--显示软键盘时的动画时长-->
<attr name="wkp_showSoftDuration" format="integer"/>
<!--开关底部布局时的动画时长-->
<attr name="wkp_toggleDuration" format="integer"/>
<!--告诉控件是否有沉浸式状态栏(一般状态栏透明或半透明均为false)-->
<attr name="wkp_hasStatusBar" format="boolean"/>
Note:每个属性都有对应的java设置代码!
布局
<?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>
Note:SoftLinearLayout一般为根布局,它的子布局最多2个,否则会异常!
代码示例
@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);
//设置状态栏颜色,有状态栏app:wkp_hasStatusBar="true"
// StatusBarUtil.setColor(this,getResources().getColor(R.color.colorPrimary));
//设置状态栏半透明,没有状态栏app:wkp_hasStatusBar="false"
StatusBarUtil.setTranslucent(this);
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.hasStatusBar(false);
//设置开关改变监听
mSll.setOnToggleChangedListener(new SoftLinearLayout.OnToggleChangedListener() {
@Override
public void onToggleChanged(boolean isToggle) {
Log.d("MainActivity", "isToggle:" + isToggle);
}
});
}
//点击开/关
public void sure(View view) {
mSll.toggle();
}
}
Note:还有其他API请根据需要自行参考!
沉浸式状态栏设置库(Github地址):laobie/StatusBarUtil
控件支持直接代码创建,还有更多API请观看SoftLinearLayout.java内的注释说明。
欢迎大家使用,感觉好用请给个Star鼓励一下,谢谢!
大家如果有更好的意见或建议以及好的灵感,请邮箱作者,谢谢!
QQ邮箱:1535514884@qq.com
163邮箱:15889686524@163.com
Gmail邮箱:wkp15889686524@gmail.com
- v1.0.3
修复当沉浸式状态栏为透明或半透明时所引起的布局BUG(需设置属性wkp_hasStatusBar或代码设置).
感谢HappyJess提供的建议. - v1.0.2
新增动画功能,可设置动画时长,详情参考属性讲解. - v1.0.1
新创建随软键盘高度变化而变化控件库.
Copyright 2017 wkp
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.