Skip to main content

Chat UI

The chat UI refers to the messaging interface within an application, primarily consisting of two components: the message list and the input area. IMKit provides default chat UI implementations through both Activity-based (RongConversationActivity) and Fragment-based approaches.

  • Activity-based: The IMKit SDK offers a default chat UI via RongConversationActivity, which includes a title bar, message list, and input area. When users tap a conversation in the conversation list, they're directed to this interface. Apps can either use RongConversationActivity directly or create custom Activities by extending it.
  • Fragment-based: Developers can integrate IMKit's conversation Fragment into their own Activities.

Chat Interface Components​

The chat interface typically comprises three sections:

  1. Title Bar: Displays conversation details (e.g., group name or peer username in one-to-one chats). In private chats, it can also show typing status.
  2. Message List: Chronologically displays all messages with distinct visual treatment for sent vs. received messages.
  3. Input Area: Allows users to compose text, voice, images, videos, and other message types.
tip

IMKit's default RongConversationActivity includes a pre-built title bar. When using the Fragment approach, you'll need to implement your own title bar.

conversation(width=250) conversation(width=250) conversation(width=250)

Title Bar Implementation​

The title bar in RongConversationActivity features:

  • Left button: Triggers finish() to exit the screen
  • Right menu button: Hidden by default (can be shown via setRightVisible)
  • Custom actions: Set click listeners via setOnRightIconClickListener

For Fragment implementations, reference TitleBar.java to build your own title bar.

Message List Customization​

The message list component:

  • Displays messages chronologically
  • Differentiates between user-sent and received messages
  • Supports customization through:
    • BaseMessageItemProvider (message templates)
    • MessageListAdapter (list item customization)

Input Area Control​

The RongExtension class centrally manages the input area for all message types (text, files, media, etc.).

Implementation Methods​

IMKit provides three approaches to create chat UIs:

  1. Use default RongConversationActivity
  2. Extend RongConversationActivity
  3. Build custom Activities with ConversationFragment

Launching the Chat UI​

Two primary launch methods exist:

Using RouteUtils​

IMKit's built-in Activity router simplifies intent handling:

String targetId = "userId";
ConversationIdentifier conversationIdentifier = new ConversationIdentifier(Conversation.ConversationType.PRIVATE, targetId);

RouteUtils.routeToConversationActivity(context, conversationIdentifier, false, bundle)
ParameterTypeDescription
contextContextActivity context
conversationIdentifierConversationIdentifierConversation type
disableSystemEmojiBooleanWhether to hide built-in emojis
bundleBundleAdditional parameters
tip

Register custom Activities with RouteUtils before using this method.

Direct Intent Navigation​

Standard Android intent-based navigation:

Intent intent = new Intent(context, ConversationActivity.class);
intent.putExtra(RouteUtils.CONVERSATION_TYPE, type.getName().toLowerCase());
intent.putExtra(RouteUtils.TARGET_ID, targetId);
intent.putExtra(RouteUtils.DISABLE_SYSTEM_EMOJI, false);
intent.putExtras(bundle);
context.startActivity(intent);

Customizing via Activity Inheritance​

Extend RongConversationActivity and register your custom class:

RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationActivity, MyConversationActivity.class)

Fragment-based Customization​

Recommended approach for maximum flexibility:

  1. Declare your Activity in AndroidManifest.xml
  2. Implement layout (e.g., activity_conversation.xml)
  3. Extend ConversationFragment:
class MyConversationActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_conversation);

ConversationFragment conversationFragment = new AppConversationFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationFragment);
transaction.commit();
}
}
  1. Register your custom Activity:
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationActivity, MyConversationActivity.class)

Customization Options​

Avatar Customization​

Modify avatar display globally via IMKit configuration:

RongConfigCenter.featureConfig().setKitImageEngine(new GlideKitImageEngine() {
@Override
public void loadConversationPortrait(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView, Message message) {
Glide.with(context).load(url)
.apply(RequestOptions.bitmapTransform(new CircleCrop()))
.into(imageView);
}
});

Nickname Visibility​

Control nickname display in private chats:

RongConfigCenter.conversationConfig().setShowReceiverUserTitle(true);

Built-in Emoji Management​

Disable default emojis (v5.2.3+):

// See Emoticon section for implementation

History Message Loading​

Configure message fetch quantities (local and remote):

RongConfigCenter.conversationConfig().setConversationHistoryMessageCount(10);
RongConfigCenter.conversationConfig().setConversationRemoteMessageCount(10);
tip

Requires enabled Cloud Storage for One-to-One and Group Messages.

Message Deletion Behavior​

Modify deletion logic based on SDK version:

  • v5.6.3+: Sync local and remote deletion
  • Earlier versions: Local-only deletion by default
RongConfigCenter.conversationConfig().setNeedDeleteRemoteMessage(true);

Multi-select Limits​

Adjust maximum selectable messages (default: 100):

RongConfigCenter.conversationConfig().rc_max_message_selected_count = 150;

Or via XML:

<integer name="rc_max_message_selected_count">150</integer>

Connection Status Alerts​

Toggle connection status notifications:

RongConfigCenter.conversationConfig().rc_is_show_warning_notification = false;

Notification Clearing​

Enable automatic notification clearing:

RongConfigCenter.featureConfig().rc_wipe_out_notification_message = true;

Custom Layouts​

Add header, footer, and empty views (v5.1.0+):

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
addHeaderView(view);
addFooterView(view);
setEmptyView(view);
}

Further Customization​

Explore additional customization options:

Reference implementations: