-
Notifications
You must be signed in to change notification settings - Fork 2.8k
TUIKit Android修改界面样式 聊天界面 输入区域
whalehe edited this page Jun 14, 2019
·
2 revisions
如图所示,输入区域InputLayout,包含语音输入,文字输入,表情输入以及更多的"+"输入:
根据需要可以隐藏部分功能,比如: ```java // 从ChatLayout里获取InputLayout InputLayout inputLayout = layout.getInputLayout(); // 隐藏音频输入的入口 inputLayout.disableAudioInput(true); // 隐藏表情输入的入口 inputLayout.disableEmojiInput(true); // 隐藏更多+功能的入口 inputLayout.disableMoreInput(true); ```
对于更多面板的图片、拍照、摄像以及发送文件的功能,也可以根据需要隐藏:
// 从ChatLayout里获取InputLayout
InputLayout inputLayout = layout.getInputLayout();
// 隐藏拍照并发送
inputLayout.disableCaptureAction(true);
// 隐藏发送文件
inputLayout.disableSendFileAction(true);
// 隐藏发送图片
inputLayout.disableSendPhotoAction(true);
// 隐藏摄像并发送
inputLayout.disableVideoRecordAction(true);
这里去掉了发送图片,增加了一个动作单元,这个动作单元会发送一条消息:
// 从ChatLayout里获取InputLayout
InputLayout inputLayout = layout.getInputLayout();
// 隐藏发送文件
inputLayout.disableSendFileAction(true);
// 定义一个动作单元
InputMoreActionUnit unit = new InputMoreActionUnit();
unit.setIconResId(R.drawable.default_user_icon); // 设置单元的图标
unit.setTitleId(R.string.profile); // 设置单元的文字标题
unit.setOnClickListener(new View.OnClickListener() { // 定义点击事件
@Override
public void onClick(View v) {
ToastUtil.toastShortMessage("自定义的更多功能");
MessageInfo info = MessageInfoUtil.buildTextMessage("我是谁");
layout.sendMessage(info, false);
}
});
// 把定义好的单元增加到更多面板
inputLayout.addAction(unit);
比如这里,我们替换为,点击一次“+”按钮,就在聊天窗口发送一条消息:
// 从ChatLayout里获取InputLayout
InputLayout inputLayout = layout.getInputLayout();
// 可以用自定义的事件来替换更多功能的入口
inputLayout.replaceMoreInput(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.toastShortMessage("自定义的更多功能按钮事件");
MessageInfo info = MessageInfoUtil.buildTextMessage("自定义的消息");
layout.sendMessage(info, false);
}
});
替换整个面板,新面板需要继承BaseInputFragment,这就是一个Fragment,把它添加到InputLayout即可。
// 从ChatLayout里获取InputLayout
InputLayout inputLayout = layout.getInputLayout();
// 可以用自定义的fragment来替换更多功能
inputLayout.replaceMoreInput(new CustomInputFragment());
新面板CustomInputFragment的实现和普通的Fragment没有区别,在onCreateView时inflate自己的View,设置事件即可,这里我们添加两个button,点击事件仅仅是弹出toast:
public static class CustomInputFragment extends BaseInputFragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View baseView = inflater.inflate(R.layout.test_chat_input_custom_fragment, container, false);
Button btn1 = baseView.findViewById(R.id.test_send_message_btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.toastShortMessage("自定义的按钮1");
}
});
Button btn2 = baseView.findViewById(R.id.test_send_message_btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.toastShortMessage("自定义的按钮2");
}
});
return baseView;
}
}
是不是很简单,整个例子都可以在这里找到。