天天看點

如何在自己的Activity中去控制EditText的焦點

在進入一個Activity時,如果這個Activity中有EditText,則這個EditText會自動擷取焦點,然後就會彈出軟鍵盤,這樣給使用者體驗不是很好。是以一般會通過代碼控制讓EditText不擷取焦點。常用的方式如下,在Activity的布局檔案中加上如下代碼:

<!-- 輸入焦點控制 -->

    <LinearLayout
        android:layout_width="0px"
        android:layout_height="0px"
        android:focusable="true"
        android:focusableInTouchMode="true" />
           

在日前開發的一個項目中界面中除了EditText就是Spinner 和Button等空間,EditText 擷取焦點以後,點選Spinner總是無法移除焦點:采取如下方式解決,

當點選Spinner時讓EditText失去焦點即可:(見标紅代碼)

// 初始化兩個LayoutInflater對象
		inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

		et_name = (EditText) findViewById(R.id.et_name);
		ib_add = (ImageButton) findViewById(R.id.ib_add);
		ib_clear = (Button) findViewById(R.id.ib_clear);
		ib_query = (Button) findViewById(R.id.ib_query);
		ib_down = (Button) findViewById(R.id.ib_down);
		ib_save = (Button) findViewById(R.id.ib_save);
		ib_back = (ImageButton) findViewById(R.id.ib_back);
		// ib_sex = (ImageButton) findViewById(R.id.ib_sex) ;

		ib_add.setOnClickListener(this);
		ib_clear.setOnClickListener(this);
		ib_query.setOnClickListener(this);
		ib_down.setOnClickListener(this);
		ib_save.setOnClickListener(this);
		ib_back.setOnClickListener(this);
		// ib_sex.setOnClickListener(this) ;

		// 性别
		ArrayAdapter<String> sexAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
		sexAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		String sexString;
		sexAdapter.clear();
		int position = 0;
		for (int i = 0; i < sexList.length; i++) {
			sexString = sexList[i];
			sexAdapter.add(sexString);
		}
		sp_sex = (Spinner) findViewById(R.id.sp_sex);
		sp_sex.setAdapter(sexAdapter);
		sp_sex.setFocusable(true);
		sp_sex.setSelection(position);
		sp_sex.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				et_name.clearFocus();
				return false;
			}
		});
		sp_sex.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				et_name.clearFocus();
				return false;
			}
		});
		sp_month.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				et_name.clearFocus();
				return false;
			}
		});
		sp_customerlevel.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
				TextView v1 = (TextView) view;
				if (v1 != null)
					v1.setTextColor(Color.BLACK); // 可以随意設定自己要的顔色值
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {

			}
		});

		// 出生月份
		ArrayAdapter<String> monthAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
		monthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		String monthString;
		monthAdapter.clear();
		position = 0;
		for (int i = 0; i < monthList.length; i++) {
			monthString = monthList[i];
			monthAdapter.add(monthString);
		}
		sp_month = (Spinner) findViewById(R.id.sp_month);
		sp_month.setAdapter(monthAdapter);
		sp_month.setFocusable(true);
		sp_month.setSelection(position);
		sp_month.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
				TextView v1 = (TextView) view;
				if (v1 != null)
					v1.setTextColor(Color.BLACK); // 可以随意設定自己要的顔色值
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {

			}
		});

		// 客戶等級
		ArrayAdapter<String> customerlevelAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
		customerlevelAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		String customerlevelString;
		customerlevelAdapter.clear();
		position = 0;
		for (int i = 0; i < customerlevelList.length; i++) {
			customerlevelString = customerlevelList[i];
			customerlevelAdapter.add(customerlevelString);
		}
		sp_customerlevel = (Spinner) findViewById(R.id.sp_customerlevel);
		sp_customerlevel.setAdapter(customerlevelAdapter);
		sp_customerlevel.setFocusable(true);
		sp_customerlevel.setSelection(position);
		sp_customerlevel.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
				TextView v1 = (TextView) view;
				if (v1 != null)
					v1.setTextColor(Color.BLACK); // 可以随意設定自己要的顔色值
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {

			}
		});

		// 查詢所有的客戶資料
		mCurrentData.clear();
		mCurrentData = CustomerDBManager.getInstance().queryCustomerAll();
		mAdapter = new SessionLocalAdapter(mCurrentData, CustomerMainActivity.this);
		mListView = getListView();
		mListView.setAdapter(mAdapter);
		mListView.setFooterDividersEnabled(false); // 設成flase時,此ListView将不會在頁腳視圖前畫分隔符。此屬性預設值為true。如果listview中沒有添加頁腳這個屬性就不起作用。
		mListView.setHeaderDividersEnabled(false); // 設成flase時,此ListView将不會在頁眉視圖前畫分隔符。此屬性預設值為true。如果listview中沒有添加頁眉這個屬性就不起作用。
		mListView.setOnItemClickListener(this);
		mListView.setOnItemLongClickListener(this);