編輯:關於Android編程
如果不看這些,就直接下托
RadioButton和CheckBox的區別:
1、單個RadioButton在選中後,通過點擊無法變為未選中
單個CheckBox在選中後,通過點擊可以變為未選中
2、一組RadioButton,只能同時選中一個
一組CheckBox,能同時選中多個
3、RadioButton在大部分UI框架中默認都以圓形表示
CheckBox在大部分UI框架中默認都以矩形表示
RadioButton和RadioGroup的關系:
1、RadioButton表示單個圓形單選框,而RadioGroup是可以容納多個RadioButton的容器
2、每個RadioGroup中的RadioButton同時只能有一個被選中
3、不同的RadioGroup中的RadioButton互不相干,即如果組A中有一個選中了,組B中依然可以有一個被選中
4、大部分場合下,一個RadioGroup中至少有2個RadioButton
5、大部分場合下,一個RadioGroup中的RadioButton默認會有一個被選中,並建議您將它放在RadioGroup中的起始位置
簡單代碼
選中項變更的事件監聽:
當RadioGroup中的選中項變更後,您可能需要做一些相應,比如上述例子中,性別選擇“女”後下面的本文也相應改變,又或者選擇不同的性別後,出現符合該性別的頭像列表進行更新,女生不會喜歡使用大胡子作為自己的頭像。
TextView tv = null;//根據不同選項所要變更的文本控件 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //根據ID找到該文本控件 tv = (TextView)this.findViewById(R.id.tvSex); //根據ID找到RadioGroup實例 RadioGroup group = (RadioGroup)this.findViewById(R.id.radioGroup); //綁定一個匿名監聽器 group.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup arg0, int arg1) { // TODO Auto-generated method stub //獲取變更後的選中項的ID int radioButtonId = arg0.getCheckedRadioButtonId(); //根據ID獲取RadioButton的實例 RadioButton rb = (RadioButton)MyActiviy.this.findViewById(radioButtonId); //更新文本內容,以符合選中項 tv.setText("您的性別是:" + rb.getText()); } }); }
項目中有許多地方用到了RadioGroup和Fragment組合實現切換類似於微博、微信底部的切換
ViewPager+RadioGroup+Fragment 超高仿微信主界面,可通過左右滑動或點擊底部RadioButton切換
activity_main.xml<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
style.xml MainActivity.Java myFragmentPagerAdapter 拓展: 從圖我們基本猜到基本思路如下: 布局文件 R.layout.activity_main 根視圖為相對布局以控制RadioGroup在底部,FrameLayout在RadioGroup的上面 設置選項卡Style 每個RadioButton都設置了統一的tab_style 設置選項卡icon的背景 每個radioButton都設置了Android:drawableTop屬性,只要創建三個drawable文件即可 eg :tab_first_background.xml 設置選項卡title的背景 除了選顯卡對應的icon要改變外,其對應的title的字體顏色也要隨之改變。注意要在res下創建color文件夾並將顏色狀態配置文件放在此文件夾下。eg:radio_colors.xml Main.java
package com.example.administrator.first.activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import com.example.administrator.first.R;
import com.example.administrator.first.adapter.myFragmentPagerAdapter;
import com.example.administrator.first.fragment.ContactsFragment;
import com.example.administrator.first.fragment.DiscoveryFragment;
import com.example.administrator.first.fragment.MeFragment;
import com.example.administrator.first.fragment.WeChatFragment;
import java.util.ArrayList;
public class MainActivity extends FragmentActivity{
private ViewPager mPager;
private RadioGroup mGroup;
private RadioButton rbChat,rbContacts,rbDiscovery,rbMe;
private ArrayList
package com.example.administrator.first.adapter;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
/**
* Created by Administrator on 2015/6/24.
*/
public class myFragmentPagerAdapter extends FragmentPagerAdapter {
ArrayList
在MainActivity中實例化各個Fragment和RadioButton和RadioParent的控件,設置好監聽器。在這裡我定義了一個switchFragment()的方法,判斷切換的Fragment是否已經添加過,避免每一次切換Fragment的時候都調用add()或者replace(),而是通過hide()和show(),減少頻繁地創建新的實例。
private void switchFragment(Fragment fragment) {
//判斷當前顯示的Fragment是不是切換的Fragment
if(mFragment != fragment) {
//判斷切換的Fragment是否已經添加過
if (!fragment.isAdded()) {
//如果沒有,則先把當前的Fragment隱藏,把切換的Fragment添加上
getSupportFragmentManager().beginTransaction().hide(mFragment)
.add(R.id.main_fragment,fragment).commit();
} else {
//如果已經添加過,則先把當前的Fragment隱藏,把切換的Fragment顯示出來
getSupportFragmentManager().beginTransaction().hide(mFragment).show(fragment).commit();
}
mFragment = fragment;
}
}
案例2底部欄
實現思路
底部選項卡可以使用3個RadioButton組成,並綁定相關的監聽器以監聽tab切換。
選項卡的上面的部分為一個容器(FrameLayout)以存取3個fragment,可以在tab綁定的監聽器中去控制fragment的顯示。
package com.example.tabapp;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.FrameLayout;
import android.widget.RadioButton;
public class MainActivity extends FragmentActivity implements OnCheckedChangeListener{
//三個選項卡
private RadioButton mRBtnFrist;
private RadioButton mRBtnSecond;
private RadioButton mRBtnThrid;
//存放fragment對應的容器
private FrameLayout mFragmentContain;
private TabFragment mFirstFragment;
private TabFragment mSecondFragment;
private TabFragment mThirdFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFragmentContain = (FrameLayout)findViewById(R.id.fl_contain);
mRBtnFrist = (RadioButton)findViewById(R.id.rb_first);
mRBtnSecond = (RadioButton)findViewById(R.id.rb_second);
mRBtnThrid = (RadioButton)findViewById(R.id.rb_thrid);
mRBtnThrid.setOnCheckedChangeListener(this);
mRBtnThrid.performClick();//此處設置默認第三個選項卡對應的fragment顯示
mRBtnFrist.setOnCheckedChangeListener(this);
mRBtnSecond.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
//用戶當前浏覽的選項卡
int checkedWidgetId = buttonView.getId();
mRBtnFrist.setChecked(checkedWidgetId == R.id.rb_first);
mRBtnSecond.setChecked(checkedWidgetId == R.id.rb_second);
mRBtnThrid.setChecked(checkedWidgetId == R.id.rb_thrid);
showFragment(checkedWidgetId);
}else {
//此處記錄了用戶上次浏覽的選項卡
String unCheckFragmentTag = getTagById(buttonView.getId());
TabFragment unCheckFragment = (TabFragment)getSupportFragmentManager().findFragmentByTag(unCheckFragmentTag);
if(unCheckFragment != null){
//隱藏上次顯示到fragment,確保fragment不會重疊
getSupportFragmentManager()
.beginTransaction()
.hide(unCheckFragment)
.commit();
}
}
}
/**
* 顯示對應的fragment
* @param checkedRadioBtnId
*/
private void showFragment(int checkedRadioBtnId){
String tag = getTagById(checkedRadioBtnId);
TabFragment mainFragment = (TabFragment) getSupportFragmentManager().findFragmentByTag(tag);
if(mainFragment == null){
//如果沒有找到對應的fragment則生成一個新的fragment,並添加到容器中
TabFragment newFragment = new TabFragment(tag);
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fl_contain, newFragment, tag)
.commit();
}else {
//如果找到了fragment則顯示它
getSupportFragmentManager()
.beginTransaction()
.show(mainFragment)
.commit();
}
}
/**
* 為三個fragment分別取三個不同到tag名
* @param widgetId
* @return
*/
private String getTagById(int widgetId){
if(widgetId == R.id.rb_first){
return "first";
}else if(widgetId == R.id.rb_second){
return "second";
}else {
return "thrid";
}
}
}
前言:從Android Studio開始,就支持jni和.so庫調用了。環境:Windows 7+Android Studio2.1.2+NDK版本:android-nd
(1)使用數據庫mysql,腳本語言如下: /* 用戶表*/ CREATE TABLE `usertbl` ( `id` int(11) NOT NULL AUTO_
在項目的開發過程我們離不開圖片,而有時候需要調用本地的圖片,有時候需要調用拍照圖片。同時實現拍照的方法有兩種,一種是調用系統拍照功能,另一種是自定義拍照功能。而本博文目前
最近由於項目太大了,導致編譯通不過(Android對一個應用中的方法個數貌似有限制),所以一直琢磨著能否將某些模塊的APK不用安裝,動態加載,通過在網上查找