Skip to content

TUIKit Android修改界面样式 聊天界面 输入区域

whalehe edited this page Jun 14, 2019 · 2 revisions

2.3、输入区域InputLayout

2.3.1 去掉不要的功能

如图所示,输入区域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);

2.3.2 增加自定义的功能


这里去掉了发送图片,增加了一个动作单元,这个动作单元会发送一条消息:

// 从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);

2.3.3 替换点击“+”的事件


比如这里,我们替换为,点击一次“+”按钮,就在聊天窗口发送一条消息:
// 从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);
    }
});

2.3.4 替换点击“+”弹出的面板


替换整个面板,新面板需要继承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;
    }
}

是不是很简单,整个例子都可以在这里找到。