效果图:

自动定位(百度地图)+列表选择

思路:

1、请求到的城市列表,提取首字母

2、城市列表比较混乱,先使用实体类把相同首字母的城市放到一起

3、显示城市列表

4、使用QuicLocationBar显示右侧字母栏

代码:

0、QuickLocationBar右侧字母插件

package com.xinyan.personal.ui.view;import android.app.Dialog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;import com.xinyan.personal.R;/*** 定位城市右侧选择字母* Created by zst on 2017/8/23.*/
public class QuickLocationBar extends View {private String characters[] = { "#", "A", "B", "C", "D", "E", "F", "G","H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T","U", "V", "W", "X", "Y", "Z" };private int choose = -1;private Paint paint = new Paint();private OnTouchLetterChangedListener mOnTouchLetterChangedListener;private TextView mTextDialog;public QuickLocationBar(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);// TODO Auto-generated constructor stub}public QuickLocationBar(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public QuickLocationBar(Context context) {super(context);// TODO Auto-generated constructor stub}public void setOnTouchLitterChangedListener(OnTouchLetterChangedListener onTouchLetterChangedListener) {this.mOnTouchLetterChangedListener = onTouchLetterChangedListener;}public void setTextDialog(TextView dialog) {this.mTextDialog = dialog;}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);int width = getWidth();int height = getHeight();int singleHeight = height / characters.length;for (int i = 0; i < characters.length; i++) {// 对paint进行相关的参数设置paint.setColor(getResources().getColor(R.color.font_feae1b));paint.setTypeface(Typeface.DEFAULT_BOLD);paint.setAntiAlias(true);paint.setTextSize(150*(float) width/320);if (i == choose) {// choose变量表示当前显示的字符位置,若没有触摸则为-1paint.setColor(getResources().getColor(R.color.bg_653fac));paint.setFakeBoldText(true);}// 计算字符的绘制的位置float xPos = width / 2 - paint.measureText(characters[i]) / 2;float yPos = singleHeight * i + singleHeight;// 在画布上绘制字符canvas.drawText(characters[i], xPos, yPos, paint);paint.reset();// 每次绘制完成后不要忘记重制Paint}}@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {int action = event.getAction();float y = event.getY();int c = (int) (y / getHeight() * characters.length);switch (action) {case MotionEvent.ACTION_UP:choose = -1;//setBackgroundColor(0x0000);invalidate();if (mTextDialog != null) {mTextDialog.setVisibility(View.GONE);}break;case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE://setBackgroundColor(getResources().getColor(R.color.bg_653fac));if (choose != c) {if (c >= 0 && c < characters.length) {if (mOnTouchLetterChangedListener != null) {mOnTouchLetterChangedListener.touchLetterChanged(characters[c]);}if (mTextDialog != null) {mTextDialog.setText(characters[c]);mTextDialog.setVisibility(View.VISIBLE);}choose = c;invalidate();}}break;}return true;}public interface OnTouchLetterChangedListener {public void touchLetterChanged(String s);}}

1、调用代码

package com.xinyan.personal.ui.activity;import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.SensorEvent;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.xinyan.personal.R;
import com.xinyan.personal.adapter.CityAdapter;
import com.xinyan.personal.adapter.CityScarchAdapter;
import com.xinyan.personal.httpManager.ServerMethodImp;
import com.xinyan.personal.httpManager.net.CallBackListener;
import com.xinyan.personal.httpManager.response.FundArealistResponse;
import com.xinyan.personal.ui.view.QuickLocationBar;
import com.xinyan.personal.util.UiUtil;import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 公积金城市列表页* Created by zst on 2017/8/23.*/
public class FundArealistActivity extends BaseActivity implements View.OnClickListener {public static final int INTENT_REQUEST_CODE = 100;//请求码public static final int INTENT_RESULT_SUCC_CODE = 101;//请求码正确public static final int INTENT_RESULT_ERR_CODE = 102;//请求码错误public static final String INTENT_RESULT_CODE_VAULE = "intent_result_code_value";//返回值城市代码public static final String INTENT_RESULT_NAME_VAULE = "intent_result_name_value";//返回值城市名称private static final int BAIDU_ACCESS_FINE_LOCATION = 100;//定位申请跳转private ListView mCityLit;private ListView city_list_search;private EditText et_search;private LinearLayout ll_city_search_list;private LinearLayout ll_location;private TextView tv_location_name;private CityAdapter adapter;private CityAdapter adapterSearch;private ImageView iv_back;private TextView overlay;private QuickLocationBar mQuicLocationBar;private List<FundArealistResponse.AreaModel> mCityNames;private List<FundArealistResponse.AreaModel> mCityNamesSearch;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_fund_area_list);iv_back = (ImageView) findViewById(R.id.iv_back);mQuicLocationBar = (QuickLocationBar) findViewById(R.id.city_loactionbar);mQuicLocationBar.setOnTouchLitterChangedListener(new LetterListViewListener());overlay = (TextView) findViewById(R.id.city_dialog);mCityLit = (ListView) findViewById(R.id.city_list);city_list_search = (ListView) findViewById(R.id.city_list_search);et_search = (EditText) findViewById(R.id.et_search);ll_city_search_list = (LinearLayout) findViewById(R.id.ll_city_search_list);ll_location = (LinearLayout) findViewById(R.id.ll_location);tv_location_name = (TextView) findViewById(R.id.tv_location_name);mQuicLocationBar.setTextDialog(overlay);iv_back.setOnClickListener(this);tv_location_name.setOnClickListener(this);//initList();requestPermission();//请求权限getCityList();listenerSearchEdit();initMapLocation();//定位相关}//搜索输入监听private void listenerSearchEdit() {mCityNamesSearch = new ArrayList<>();adapterSearch = new CityAdapter(FundArealistActivity.this, mCityNamesSearch);city_list_search.setAdapter(adapterSearch);et_search.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {// 输入的内容变化的监听}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {// 输入前的监听}@Overridepublic void afterTextChanged(Editable s) {// 输入后的监听if (TextUtils.isEmpty(et_search.getText().toString())) {ll_city_search_list.setVisibility(View.GONE);ll_location.setVisibility(View.VISIBLE);mCityLit.setVisibility(View.VISIBLE);mQuicLocationBar.setVisibility(View.VISIBLE);} else {ll_city_search_list.setVisibility(View.VISIBLE);ll_location.setVisibility(View.GONE);mCityLit.setVisibility(View.GONE);mQuicLocationBar.setVisibility(View.GONE);mCityNamesSearch.clear();for (int i = 0; i < mCityNames.size(); i++) {if (mCityNames.get(i).getCityName().contains(et_search.getText().toString())) {mCityNamesSearch.add(mCityNames.get(i));}}adapterSearch.notifyDataSetChanged();//UiUtil.showToast(FundArealistActivity.this, et_search.getText().toString());}}});}//ListView监听-字母快速选择监听
//    private class CityListOnItemClick implements AdapterView.OnItemClickListener {
//        @Override
//        public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
//            FundArealistResponse.AreaModel cityModel = (FundArealistResponse.AreaModel) mCityLit.getAdapter().getItem(pos);
//            //Toast.makeText(FundArealistActivity.this, cityModel.getAreaCode(), Toast.LENGTH_SHORT).show();
//            String areaCode = cityModel.getAreaCode();
//            String cityName = cityModel.getCityName();
//            if (TextUtils.isEmpty(areaCode)) {
//                setResult(INTENT_RESULT_ERR_CODE);
//            } else {
//                Intent intent = new Intent();
//                intent.putExtra(INTENT_RESULT_CODE_VAULE, areaCode);
//                intent.putExtra(INTENT_RESULT_NAME_VAULE, cityName);
//                setResult(INTENT_RESULT_SUCC_CODE, intent);
//            }
//            finish();
//        }
//    }public void setItemClick(FundArealistResponse.AreaModel cityModel) {String areaCode = cityModel.getAreaCode();String cityName = cityModel.getCityName();if (TextUtils.isEmpty(areaCode)) {setResult(INTENT_RESULT_ERR_CODE);} else {Intent intent = new Intent();intent.putExtra(INTENT_RESULT_CODE_VAULE, areaCode);intent.putExtra(INTENT_RESULT_NAME_VAULE, cityName);setResult(INTENT_RESULT_SUCC_CODE, intent);}finish();}private class LetterListViewListener implementsQuickLocationBar.OnTouchLetterChangedListener {@Overridepublic void touchLetterChanged(String s) {// TODO Auto-generated method stubMap<String, Integer> alphaIndexer = adapter.getCityMap();//Toast.makeText(FundArealistActivity.this, s + "。。" + alphaIndexer.get(s) + "..." + alphaIndexer.size(), Toast.LENGTH_SHORT).show();if (alphaIndexer.get(s) != null) {int position = alphaIndexer.get(s);mCityLit.setSelection(position);//Toast.makeText(FundArealistActivity.this, position + "", Toast.LENGTH_SHORT).show();}}}private void getCityList() {showProgressDialog();final Map<String, Object> map = new HashMap<>();ServerMethodImp.getInstance().fundArealist(this, map, new CallBackListener<FundArealistResponse>() {@Overridepublic void onSuccess(FundArealistResponse response) {if (response.isSuccess()) {mCityNames = response.getData();//把list按照首字母形同排序Collections.sort(mCityNames);adapter = new CityAdapter(FundArealistActivity.this, mCityNames);mCityLit.setAdapter(adapter);//mCityLit.setOnItemClickListener(new CityListOnItemClick());} else {showOneBtnCustomDialog(response.getMessage());}cancleProgressDialog();}@Overridepublic void onFailure(int code, String msg) {cancleProgressDialog();showOneBtnCustomDialog(msg);}});}@Overridepublic void onClick(View v) {int id = v.getId();switch (id) {case R.id.iv_back:finish();break;case R.id.tv_location_name:FundArealistResponse.AreaModel cityModel = null;String locationName = tv_location_name.getText().toString();for (int i = 0; i < mCityNames.size(); i++) {if (mCityNames.get(i).getCityName().contains(locationName)) {cityModel = mCityNames.get(i);break;}else if(locationName.contains(mCityNames.get(i).getCityName())) {cityModel = mCityNames.get(i);break;}}//UiUtil.showToast(FundArealistActivity.this, cityModel.getCityName());setItemClick(cityModel);break;}}//定位相关:初始化定位private void initMapLocation() {// 定位初始化MyLocationListenner myListener = new MyLocationListenner();LocationClient mLocClient = new LocationClient(FundArealistActivity.this);mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setIsNeedAddress(true);option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(10000000);//自动定位间隔mLocClient.setLocOption(option);mLocClient.start();}/*** 定位相关:定位SDK监听函数*/public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//得到未知信息//得到城市String curCity = location.getCity();if (TextUtils.isEmpty(curCity)) {tv_location_name.setText("定位中...");} else {tv_location_name.setText(curCity);}}public void onReceivePoi(BDLocation poiLocation) {}}//申请地图相关权限private void requestPermission() {if (Build.VERSION.SDK_INT >= 23) {ArrayList<String> permissions = new ArrayList<>();if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);}if (permissions.size() == 0) {return;} else {requestPermissions(permissions.toArray(new String[permissions.size()]), BAIDU_ACCESS_FINE_LOCATION);}}}//申请地图相关权限:返回监听@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case BAIDU_ACCESS_FINE_LOCATION:if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//允许initMapLocation();} else {//拒绝tv_location_name.setText("定位权限未开启");}break;default:break;}}
}

activity_fund_area_list.xml

<?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="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="44dp"android:background="@color/bg_130b27"><ImageViewandroid:id="@+id/iv_back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:src="@drawable/ic_back"/><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:padding="10dp"android:text="选择城市"android:textColor="@color/white"android:textSize="18sp"/></RelativeLayout><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_gravity="center"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:background="@color/white"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_search"/><EditTextandroid:id="@+id/et_search"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"style="@android:style/Widget.TextView"android:textColorHint="@color/font_cccccc"android:textColor="@color/font_130b27"android:background="@null"android:hint="请输入城市名"/></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="@color/line_dddddd"/><LinearLayoutandroid:id="@+id/ll_city_search_list"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:visibility="gone"><ListViewandroid:id="@+id/city_list_search"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:divider="@color/bg_dddddd"android:dividerHeight="1dp"/><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="@color/line_dddddd"/></LinearLayout><LinearLayoutandroid:id="@+id/ll_location"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:textColor="@color/font_7c738c"android:text="您所在的城市"/><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="@color/line_dddddd"/><TextViewandroid:id="@+id/tv_location_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:textColor="@color/font_130b27"android:background="@color/white"android:text="正在定位..."/><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="@color/line_dddddd"/></LinearLayout><ListViewandroid:id="@+id/city_list"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:divider="@color/bg_dddddd"android:dividerHeight="1dp"/></LinearLayout><TextViewandroid:id="@+id/city_dialog"android:layout_width="80.0dip"android:layout_height="80.0dip"android:layout_gravity="center"android:gravity="center"android:textColor="@color/bg_feae1b"android:textSize="30.0sp"android:visibility="gone"/><com.xinyan.personal.ui.view.QuickLocationBarandroid:id="@+id/city_loactionbar"android:layout_width="30.0dip"android:layout_height="fill_parent"android:layout_gravity="right|center"android:paddingBottom="2dp"/></FrameLayout></LinearLayout>

2、FundArealistResponse实体类

package com.xinyan.personal.httpManager.response;import com.xinyan.personal.util.DigitUtil;import java.util.List;/*** 公积金支持城市* Created by zst on 2017/8/24.*/
public class FundArealistResponse extends BaseResponse {private List<AreaModel> data;public List<AreaModel> getData() {return data;}public void setData(List<AreaModel> data) {this.data = data;}public class AreaModel implements Comparable {private String areaCode;private String cityName;public String getAreaCode() {return areaCode;}public void setAreaCode(String areaCode) {this.areaCode = areaCode;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}@Overridepublic int compareTo(Object o) {AreaModel areaModel = (AreaModel) o;return DigitUtil.getPinYinFirst(this.getCityName()).compareTo(DigitUtil.getPinYinFirst(areaModel.getCityName()));}}
}

3、CityAdapter适配器

package com.xinyan.personal.adapter;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;import com.xinyan.personal.R;
import com.xinyan.personal.httpManager.response.FundArealistResponse;
import com.xinyan.personal.ui.activity.FundArealistActivity;
import com.xinyan.personal.util.DigitUtil;import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 城市配器* Created by zst on 2017/8/2.*/public class CityAdapter extends BaseAdapter {private LayoutInflater inflater;private List<FundArealistResponse.AreaModel> list;private Map<String, Integer> alphaIndexer;private String[] sections;private Context context;public CityAdapter(Context context, List<FundArealistResponse.AreaModel> list) {//赋值初始化this.context = context;this.inflater = LayoutInflater.from(context);this.list = list;alphaIndexer = new HashMap<String, Integer>();sections = new String[list.size()];//把相邻的相同的首字母放到一起,同时首个字母显示for (int i = 0; i < list.size(); i++) {String currentStr = DigitUtil.getPinYinFirst(list.get(i).getCityName());String previewStr = (i - 1) >= 0 ? DigitUtil.getPinYinFirst(list.get(i - 1).getCityName()): " ";if (!previewStr.equals(currentStr)) {//前一个首字母与当前首字母不同时加入HashMap中同时显示该字母String name = DigitUtil.getPinYinFirst(list.get(i).getCityName());alphaIndexer.put(name, i);sections[i] = name;}}}public Map<String, Integer> getCityMap() {return alphaIndexer;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = inflater.inflate(R.layout.item_city, null);holder = new ViewHolder();holder.alpha = (TextView) convertView.findViewById(R.id.item_city_alpha);holder.name = (TextView) convertView.findViewById(R.id.item_city_name);holder.rl_item = (RelativeLayout) convertView.findViewById(R.id.rl_item);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.name.setText(list.get(position).getCityName());String currentStr = DigitUtil.getPinYinFirst(list.get(position).getCityName());String previewStr = (position - 1) >= 0 ? DigitUtil.getPinYinFirst(list.get(position - 1).getCityName()) : " ";if (!previewStr.equals(currentStr)) {holder.alpha.setVisibility(View.VISIBLE);holder.alpha.setText(currentStr);} else {holder.alpha.setVisibility(View.GONE);}holder.rl_item.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {((FundArealistActivity)context).setItemClick(list.get(position));}});return convertView;}private class ViewHolder {RelativeLayout rl_item;TextView alpha;TextView name;}
}

item_city.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/rl_item"><TextViewandroid:id="@+id/item_city_alpha"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@color/bg_efeff4"android:padding="10dp"android:textColor="@color/font_7c738c"/><TextViewandroid:id="@+id/item_city_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/item_city_alpha"android:padding="10dp"android:singleLine="true"android:text="name"android:textColor="@color/font_130b27"/>
</RelativeLayout>

4、汉字转拼音、返回拼音大写工具类;

其中汉字转拼音必须下载jar包:下载

package com.mandaotech.ewallet.android.util;import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;/*** 数字和文字处理* Created by zst on 2017/6/28.*/public class DigitUtil {/*** 手机号中间四位隐藏* @param phone*/public static String phoneHide(String phone) {String phoneHide = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");return phoneHide;}/*** 身份证中间8位隐藏* 隐藏出生年月* @param idCard*/public static String idCardHide(String idCard) {String idCardHide = idCard.replaceAll("(\\d{6})\\d{8}(\\w{4})","$1*****$2");return idCardHide;}/*** 汉子转拼音* @param src* @return*/public static String getPinYin(String src) {char[] t1 = null;t1 = src.toCharArray();// System.out.println(t1.length);String[] t2 = new String[t1.length];// System.out.println(t2.length);// 设置汉字拼音输出的格式HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);t3.setVCharType(HanyuPinyinVCharType.WITH_V);String t4 = "";int t0 = t1.length;try {for (int i =0; i < t0; i++) {// 判断能否为汉字字符// System.out.println(t1[i]);if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中t4 += t2[0]+" ";// 取出该汉字全拼的第一种读音并连接到字符串t4后} else {// 如果不是汉字字符,间接取出字符并连接到字符串t4后t4 += Character.toString(t1[i]);}}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return t4;}/*** 返回拼音首字母大写* @param str* @return*/public static String getPinYinFirst(String str) {String pinyin = getPinYin(str);return pinyin.substring(0,1).toUpperCase();}
}

Android城市列表,首字母排序,右侧点击字母定位相关推荐

  1. Android 城市列表选择

    最近开发一个城市选择的功能,找了这个文章 Android 城市列表选择 结果发现它使用的拼音转换库pinyin4j有一个很严重的问题,竟然长沙chang sha识别为zhang sha,结果长沙北分在 ...

  2. android 城市列表数据,用RecyclerView写的城市列表

    分享一下城市列表的网格布局样式的demo,代码里面包括网格布局和竖直列表布局两种样式. 网格样式: image.png 竖直列表样式: image.png 数据来源,本地的citylist.json城 ...

  3. Android城市列表

    大家好,分享一个热门城市列表的Demo,里面显示了热门的城市,原作者是Kayone,在他的基础上加上了全中国城市的搜索功能和拼音搜索功能,但是现在只能完整的搜索.模糊搜索还没完成. 下载地址:http ...

  4. java list按字母排序_如何按字母顺序对列表进行排序?

    使用Collections.sort解决方案 如果您被迫使用该List,或者您的程序具有类似的结构 创建列表 添加一些国家名称 排序他们一次 永远不要再改变那个清单 然后Thilos的回答将是最好的方 ...

  5. java字母排序_java可以对字母排序吗?

    java对字母排序代码如下:(推荐:java视频教程)package lianxi.Demo; import java.util.ArrayList; import java.util.List; i ...

  6. html列表按时间排序代码_按字母顺序排序的列表

    有时候你需要自制一份课件PPT或者手写笔记的关键词索引,用来开卷考试查阅PPT或者复习查阅笔记时能快速定位查阅内容位置,这时你可能想要一个按字母顺序排序的列表来帮助构建需要的索引. LaTeX自身的i ...

  7. python列表按照字母排序_Python:按字母顺序对列表进行排序/分组

    我觉得这已经被问到了,但是这些问题的答案对我的代码没有效果. 我试图根据第一个列表[2]按字母顺序对列表进行排序,然后在按列表[3]和列表[4]排序的匹配条目内对列表进行排序,依此类推.真实的数据更大 ...

  8. android 城市列表

    项目中采用了三种样式城市选择(无语....),第一种是: 地址:https://github.com/yanxing/android-util   sortlistviewlibrary 第二种是: ...

  9. android ascii 比较大小写,为什么可以通过ASCII中的字母排序规则来进行字母的大小写转换?...

    首先明确 C++ 中字符的概念,一个char类型的变量在实际存储时通常是一个8位的二进制数(即一个字节),所以支持各种数学运算.当你用'A'-'a'时,结果就是这两个字符对应的数值差. 而一个char ...

最新文章

  1. 计算机基础办公应用考试试题,计算机基础考试试题库和答案.doc
  2. python中如何调用java_在Python程序中调用Java代码的实现
  3. 机器学习初学者公众号下载资源汇总(一)
  4. 计算机专业课的教学准备,计算机专业课程教学中的分层教学模式
  5. 中国古代数学有多牛?
  6. linux path减少,Linux的环境变量PATH中所带来的问题及解决方法
  7. software engineering homework, product analysis
  8. python程序弹出输入框_尝试使Kivy按钮弹出一个文本框
  9. BeyondCompared4提示“缺少评估信息或损坏” 一条命令解决
  10. CUDA学习(一)之使用GPU输出HelloWorld
  11. 【突发】解决remote: Support for password authentication was removed on August 13, 2021. Please use a perso
  12. HashMap 容量为什么总是为 2 的次幂?
  13. 小编带着小白看springboot源码3
  14. RFC2544测试指标
  15. android project build with ant
  16. react里面 内联css样式怎么样_简单的使用Radium管理React中的内联样式
  17. OpenWRT-Wifidog之利用Luci认证
  18. vscode搭建c++开发环境
  19. 全面保护个人电脑中的宝贵数据和文件(转)
  20. 【NOIP2016】bzoj4719 天天爱跑步

热门文章

  1. springboot+jsp+ssm手办周边商城购物网站306
  2. Flash互动电子地图制作手册
  3. 新长城 Html标签
  4. 分享一个有趣的shell脚本--单词及字母去重排序案例
  5. Zookeeper-03-ZK的ZAB协议和工作原理
  6. 政务大数据系列7:政务大数据的部署结构
  7. Win系统 - 如何批量修改文件后缀名?
  8. Mysql数据库实现主从数据库同步更新
  9. 浅析平安城市对综合视频监控系统资源管理的技术要求
  10. 一对一直播系统源码——如何只需三步搭建