1、布局文件
<ListView
android:id="@+id/navi_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8px"
android:paddingRight="8px"
/>
2、ListView的适配器布局文件
<?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:orientation="horizontal"
android:background="@color/list_back"
android:gravity="center"
>
<RadioButton
android:id="@+id/navi_list_item_rb"
style="@style/volume_fragment_rb_stytle"
android:checked="false"
android:clickable="false"
android:focusable="false"
/>
<ImageView
android:id="@+id/navi_list_item_iv"
android:layout_marginLeft="10px"
android:layout_width="30px"
android:layout_height="30px"
android:background="@drawable/ic_launcher"
/>
</LinearLayout>
3、主文件和适配器代码,下面是做语言适配时候的代码,供以后参考
public class LanguageFragment extends RTBaseFragment implements OnItemClickListener {
private String TAG = "LanguageFragment";
private ListView language_lv;
private String[] languageItemString = null;
// private final Locale[] languageLocalString = new Locale[]{Locale.SIMPLIFIED_CHINESE,Locale.TRADITIONAL_CHINESE,Locale.US,Locale.KOREA,Locale.JAPAN};
private final Locale[] languageLocalString = new Locale[]{Locale.SIMPLIFIED_CHINESE,Locale.US};
private List<LanguageInfo> mListLanguageInfo;
private LanguageAdapter languageAdapter;
private int selectPosition = 0;//默认显示第一个
@Override
protected int setView() {
return R.layout.language_fragment_layout;
}
@Override
protected void initView(View view) {
language_lv = (ListView) view.findViewById(R.id.language_lv);
// languageItemString = new String[]{mContext.getString(R.string.simplified_chinese),mContext.getString(R.string.traditional_chinese),
// mContext.getString(R.string.language_english),mContext.getString(R.string.language_korea),mContext.getString(R.string.language_japan)};
languageItemString = new String[]{mContext.getString(R.string.simplified_chinese),mContext.getString(R.string.language_english)};
getListData();
initLanguage();
languageAdapter = new LanguageAdapter(mListLanguageInfo);
language_lv.setAdapter(languageAdapter);
}
@Override
protected void initEvent() {
language_lv.setOnItemClickListener(this);
}
@Override
protected void initData() {
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
LanguageInfo mInfo = mListLanguageInfo.get(position);
updateLanguage(mInfo);
selectPosition = position;
languageAdapter.notifyDataSetChanged();
}
public class LanguageAdapter extends BaseAdapter{
private List<LanguageInfo> list;
public LanguageAdapter(List<LanguageInfo> listDates){
list = listDates;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView==null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.language_list_item, null);
viewHolder = new ViewHolder();
viewHolder.radioButton = (RadioButton) convertView.findViewById(R.id.language_list_item_rb);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.radioButton.setText(list.get(position).getLanguage());
if(selectPosition == position){
viewHolder.radioButton.setChecked(true);
}
else{
viewHolder.radioButton.setChecked(false);
}
return convertView;
}
public class ViewHolder{
public RadioButton radioButton;
}
}
/**
* 初始化本地语言
*/
private void initLanguage() {
Locale currentLocale = getCurrentLocale(mContext);
for (int i = 0; i < mListLanguageInfo.size(); i++) {
Locale temp = mListLanguageInfo.get(i).getLocale();
if(temp.equals(currentLocale)){
//标记当前item
selectPosition = i;
return;
}
}
}
/**
* 获取数据
* @return
*/
public void getListData() {
mListLanguageInfo = new ArrayList<LanguageInfo>();
for (int i = 0; i < languageItemString.length; i++) {
LanguageInfo mLanguageInfo = new LanguageInfo();
mLanguageInfo.setLanguage(languageItemString[i]);
mLanguageInfo.setLocale(languageLocalString[i]);
mListLanguageInfo.add(mLanguageInfo);
}
}
/**
* 更换语言
* @param info
*/
public void updateLanguage(final LanguageInfo info){
new Thread(new Runnable() {
@Override
public void run() {
// 更改系统语言
UpdateLanguageUtils.updateLanguage(info.getLocale());
}
}).start();
}
/**
* 获取当前系统语言
* @param mContext
* @return
*/
public Locale getCurrentLocale(Context mContext){
Locale locale = mContext.getResources().getConfiguration().locale;
return locale;
}
}
4、所加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
5、Utils相关代码
public class UpdateLanguageUtils {
public static void updateLanguage(Locale locale) {
try {
Object objIActMag, objActMagNative;
Class clzIActMag = Class.forName("android.app.IActivityManager");
Class clzActMagNative = Class
.forName("android.app.ActivityManagerNative");
Method mtdActMagNative$getDefault = clzActMagNative
.getDeclaredMethod("getDefault");
objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
Method mtdIActMag$getConfiguration = clzIActMag
.getDeclaredMethod("getConfiguration");
Configuration config = (Configuration) mtdIActMag$getConfiguration
.invoke(objIActMag);
config.locale = locale;
Class clzConfig = Class
.forName("android.content.res.Configuration");
java.lang.reflect.Field userSetLocale = clzConfig
.getField("userSetLocale");
userSetLocale.set(config, true);
Class[] clzParams = { Configuration.class };
Method mtdIActMag$updateConfiguration = clzIActMag
.getDeclaredMethod("updateConfiguration", clzParams);
mtdIActMag$updateConfiguration.invoke(objIActMag, config);
} catch (Exception e) {
e.printStackTrace();
}
}
}