最终实现的效果图如下:
看下布局的整体的outline:
可以看到整体是使用线性布局,中间那个按钮ImageView有一个属性被设置了:
android:visibility="invisible"
整体的实现代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f0eb"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/height_top_bar"
android:background="@color/common_top_bar_blue"
android:gravity="center_vertical" >
<TextView
android:id="@+id/message_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="设置"
android:textColor="#fff"
android:textSize="18sp" />
</RelativeLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="none" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_marginTop="10dip"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="30dip"
android:gravity="bottom|left"
android:paddingLeft="10dip"
android:text="新消息提醒"
android:textColor="@color/btn_gray_pressed" />
<TextView
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="@color/btn_gray_normal" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/rl_switch_notification"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="@drawable/btn_bottom_selector"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingLeft="10dip"
android:text="接收新消息通知"
android:textColor="@android:color/black"
android:textSize="14sp"
android:typeface="serif" />
<ImageView
android:id="@+id/iv_switch_open_notification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/open_icon"
android:visibility="visible" />
<ImageView
android:id="@+id/iv_switch_close_notification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/close_icon"
android:visibility="invisible" />
</RelativeLayout>
<TextView
android:id="@+id/textview1"
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:background="#E6E6E6" />
<RelativeLayout
android:id="@+id/rl_switch_sound"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="@drawable/btn_bottom_selector"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingLeft="10dip"
android:text="声音"
android:textColor="@android:color/black"
android:textSize="14sp"
android:typeface="serif" />
<ImageView
android:id="@+id/iv_switch_open_sound"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/open_icon"
android:visibility="visible" />
<ImageView
android:id="@+id/iv_switch_close_sound"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/close_icon"
android:visibility="invisible" />
</RelativeLayout>
<TextView
android:id="@+id/textview2"
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:background="#E6E6E6" />
<RelativeLayout
android:id="@+id/rl_switch_vibrate"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="@drawable/btn_bottom_selector"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingLeft="10dip"
android:text="震动"
android:textColor="@android:color/black"
android:textSize="14sp"
android:typeface="serif" />
<ImageView
android:id="@+id/iv_switch_open_vibrate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/open_icon"
android:visibility="visible" />
<ImageView
android:id="@+id/iv_switch_close_vibrate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/close_icon"
android:visibility="invisible" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_marginTop="10dip"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="30dip"
android:gravity="bottom|left"
android:paddingLeft="10dip"
android:text="聊天设置"
android:textColor="@color/btn_gray_pressed" />
<TextView
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="@color/btn_gray_normal" />
</LinearLayout>
<RelativeLayout
android:id="@+id/rl_switch_speaker"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="@drawable/btn_bottom_selector"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingLeft="10dip"
android:text="使用扬声器播放语音"
android:textColor="@android:color/black"
android:textSize="14sp"
android:typeface="serif" />
<ImageView
android:id="@+id/iv_switch_open_speaker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/open_icon"
android:visibility="visible" />
<ImageView
android:id="@+id/iv_switch_close_speaker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/close_icon"
android:visibility="invisible" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/btn_gray_normal" />
<LinearLayout
android:id="@+id/ll_black_list"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="@drawable/btn_bottom_selector"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingLeft="10dip"
android:text="通讯录黑名单"
android:textColor="@android:color/black"
android:textSize="14sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/btn_gray_normal" />
<LinearLayout
android:id="@+id/ll_diagnose"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="@drawable/btn_bottom_selector"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingLeft="10dip"
android:text="发送程序的运行日志给我"
android:textColor="@android:color/black"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
<!--
<TextView
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:background="#E6E6E6" />
-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dip"
android:background="#ffffff"
android:orientation="vertical" >
<Button
android:id="@+id/btn_logout"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_marginBottom="12dp"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_marginTop="12dp"
android:background="@drawable/btn_style_alert_dialog_special"
android:text="@string/button_logout"
android:textColor="@android:color/white"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
看一下逻辑代码的Outline:
package com.dy.ustc.im.ui;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.dy.ustc.im.BlacklistActivity;
import com.dy.ustc.im.DiagnoseActivity;
import com.dy.ustc.im.R;
import com.dy.ustc.im.application.IMApplication;
import com.dy.ustc.im.controller.MyApp;
import com.easemob.EMCallBack;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMChatOptions;
/**
* 设置界面
*
* @author
*
*/
public class SettingsFragment extends Fragment implements OnClickListener {
/**
* 设置新消息通知布局
*/
private RelativeLayout rl_switch_notification;
/**
* 设置声音布局
*/
private RelativeLayout rl_switch_sound;
/**
* 设置震动布局
*/
private RelativeLayout rl_switch_vibrate;
/**
* 设置扬声器布局
*/
private RelativeLayout rl_switch_speaker;
/**
* 打开新消息通知imageView
*/
private ImageView iv_switch_open_notification;
/**
* 关闭新消息通知imageview
*/
private ImageView iv_switch_close_notification;
/**
* 打开声音提示imageview
*/
private ImageView iv_switch_open_sound;
/**
* 关闭声音提示imageview
*/
private ImageView iv_switch_close_sound;
/**
* 打开消息震动提示
*/
private ImageView iv_switch_open_vibrate;
/**
* 关闭消息震动提示
*/
private ImageView iv_switch_close_vibrate;
/**
* 打开扬声器播放语音
*/
private ImageView iv_switch_open_speaker;
/**
* 关闭扬声器播放语音
*/
private ImageView iv_switch_close_speaker;
/**
* 声音和震动中间的那条线
*/
private TextView textview1, textview2;
private LinearLayout blacklistContainer;
/**
* 退出按钮
*/
private Button logoutBtn;
private EMChatOptions chatOptions;
/**
* 诊断
*/
private LinearLayout llDiagnose;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_conversation_settings, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// 防止被T后,没点确定按钮然后按了home键,长期在后台又进app导致的crash
if(savedInstanceState != null && savedInstanceState.getBoolean("isConflict", false))
return;
//注意:添加了getView() 然后再findViewById
rl_switch_notification = (RelativeLayout) getView().findViewById(R.id.rl_switch_notification);
rl_switch_sound = (RelativeLayout) getView().findViewById(R.id.rl_switch_sound);
rl_switch_vibrate = (RelativeLayout) getView().findViewById(R.id.rl_switch_vibrate);
rl_switch_speaker = (RelativeLayout) getView().findViewById(R.id.rl_switch_speaker);
iv_switch_open_notification = (ImageView) getView().findViewById(R.id.iv_switch_open_notification);
iv_switch_close_notification = (ImageView) getView().findViewById(R.id.iv_switch_close_notification);
iv_switch_open_sound = (ImageView) getView().findViewById(R.id.iv_switch_open_sound);
iv_switch_close_sound = (ImageView) getView().findViewById(R.id.iv_switch_close_sound);
iv_switch_open_vibrate = (ImageView) getView().findViewById(R.id.iv_switch_open_vibrate);
iv_switch_close_vibrate = (ImageView) getView().findViewById(R.id.iv_switch_close_vibrate);
iv_switch_open_speaker = (ImageView) getView().findViewById(R.id.iv_switch_open_speaker);
iv_switch_close_speaker = (ImageView) getView().findViewById(R.id.iv_switch_close_speaker);
logoutBtn = (Button) getView().findViewById(R.id.btn_logout);
//在退出登录按钮上显示当前用户名
if(!TextUtils.isEmpty(EMChatManager.getInstance().getCurrentUser())){
logoutBtn.setText(getString(R.string.button_logout) + "(" + EMChatManager.getInstance().getCurrentUser() + ")");
}
textview1 = (TextView) getView().findViewById(R.id.textview1);
textview2 = (TextView) getView().findViewById(R.id.textview2);
blacklistContainer = (LinearLayout) getView().findViewById(R.id.ll_black_list);
llDiagnose=(LinearLayout) getView().findViewById(R.id.ll_diagnose);
blacklistContainer.setOnClickListener(this);
rl_switch_notification.setOnClickListener(this);
rl_switch_sound.setOnClickListener(this);
rl_switch_vibrate.setOnClickListener(this);
rl_switch_speaker.setOnClickListener(this);
logoutBtn.setOnClickListener(this);
llDiagnose.setOnClickListener(this);
chatOptions = EMChatManager.getInstance().getChatOptions();
if (chatOptions.getNotificationEnable()) {
iv_switch_open_notification.setVisibility(View.VISIBLE);
iv_switch_close_notification.setVisibility(View.INVISIBLE);
} else {
iv_switch_open_notification.setVisibility(View.INVISIBLE);
iv_switch_close_notification.setVisibility(View.VISIBLE);
}
if (chatOptions.getNoticedBySound()) {
iv_switch_open_sound.setVisibility(View.VISIBLE);
iv_switch_close_sound.setVisibility(View.INVISIBLE);
} else {
iv_switch_open_sound.setVisibility(View.INVISIBLE);
iv_switch_close_sound.setVisibility(View.VISIBLE);
}
if (chatOptions.getNoticedByVibrate()) {
iv_switch_open_vibrate.setVisibility(View.VISIBLE);
iv_switch_close_vibrate.setVisibility(View.INVISIBLE);
} else {
iv_switch_open_vibrate.setVisibility(View.INVISIBLE);
iv_switch_close_vibrate.setVisibility(View.VISIBLE);
}
if (chatOptions.getUseSpeaker()) {
iv_switch_open_speaker.setVisibility(View.VISIBLE);
iv_switch_close_speaker.setVisibility(View.INVISIBLE);
} else {
iv_switch_open_speaker.setVisibility(View.INVISIBLE);
iv_switch_close_speaker.setVisibility(View.VISIBLE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.rl_switch_notification:
if (iv_switch_open_notification.getVisibility() == View.VISIBLE) {
iv_switch_open_notification.setVisibility(View.INVISIBLE);
iv_switch_close_notification.setVisibility(View.VISIBLE);
rl_switch_sound.setVisibility(View.GONE);
rl_switch_vibrate.setVisibility(View.GONE);
textview1.setVisibility(View.GONE);
textview2.setVisibility(View.GONE);
chatOptions.setNotificationEnable(false);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgNotification(false);
} else {
iv_switch_open_notification.setVisibility(View.VISIBLE);
iv_switch_close_notification.setVisibility(View.INVISIBLE);
rl_switch_sound.setVisibility(View.VISIBLE);
rl_switch_vibrate.setVisibility(View.VISIBLE);
textview1.setVisibility(View.VISIBLE);
textview2.setVisibility(View.VISIBLE);
chatOptions.setNotificationEnable(true);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgNotification(true);
}
break;
case R.id.rl_switch_sound:
if (iv_switch_open_sound.getVisibility() == View.VISIBLE) {
iv_switch_open_sound.setVisibility(View.INVISIBLE);
iv_switch_close_sound.setVisibility(View.VISIBLE);
chatOptions.setNoticeBySound(false);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgSound(false);
} else {
iv_switch_open_sound.setVisibility(View.VISIBLE);
iv_switch_close_sound.setVisibility(View.INVISIBLE);
chatOptions.setNoticeBySound(true);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgSound(true);
}
break;
case R.id.rl_switch_vibrate:
if (iv_switch_open_vibrate.getVisibility() == View.VISIBLE) {
iv_switch_open_vibrate.setVisibility(View.INVISIBLE);
iv_switch_close_vibrate.setVisibility(View.VISIBLE);
chatOptions.setNoticedByVibrate(false);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgVibrate(false);
} else {
iv_switch_open_vibrate.setVisibility(View.VISIBLE);
iv_switch_close_vibrate.setVisibility(View.INVISIBLE);
chatOptions.setNoticedByVibrate(true);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgVibrate(true);
}
break;
case R.id.rl_switch_speaker:
if (iv_switch_open_speaker.getVisibility() == View.VISIBLE) {
iv_switch_open_speaker.setVisibility(View.INVISIBLE);
iv_switch_close_speaker.setVisibility(View.VISIBLE);
chatOptions.setUseSpeaker(false);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgSpeaker(false);
} else {
iv_switch_open_speaker.setVisibility(View.VISIBLE);
iv_switch_close_speaker.setVisibility(View.INVISIBLE);
chatOptions.setUseSpeaker(true);
EMChatManager.getInstance().setChatOptions(chatOptions);
MyApp.getInstance().getModel().setSettingMsgVibrate(true);
}
break;
case R.id.btn_logout: //退出登陆
logout();
break;
case R.id.ll_black_list:
startActivity(new Intent(getActivity(), BlacklistActivity.class));
break;
case R.id.ll_diagnose:
startActivity(new Intent(getActivity(), DiagnoseActivity.class));
break;
default:
break;
}
}
void logout() {
final ProgressDialog pd = new ProgressDialog(getActivity());
pd.setMessage("正在退出登陆..");
pd.setCanceledOnTouchOutside(false);
pd.show();
IMApplication.getInstance().logout(new EMCallBack() {
@Override
public void onSuccess() {
getActivity().runOnUiThread(new Runnable() {
public void run() {
pd.dismiss();
// 重新显示登陆页面
((MainActivity) getActivity()).finish();
startActivity(new Intent(getActivity(), LoginActivity.class));
}
});
}
@Override
public void onProgress(int progress, String status) {
}
@Override
public void onError(int code, String message) {
}
});
}
@Override
public void onSaveInstanceState(Bundle outState) {
if(((MainActivity)getActivity()).isConflict)
outState.putBoolean("isConflict", true);
super.onSaveInstanceState(outState);
}
}