AutoRoom
控制教室灯光
- 安装过程
- 具体流程
遇见问题
- 安装过程
工具:Android Studio2.3.3
尽量直接点击下一步安装,避免出现各种问题
具体流程
需求分析
功能
- 查看每栋楼
- 每间教室的灯光开关情况,并且可以进行开关控制
架构
- 常见的 title + framelayout + radiogroup
- BaseFragment
实现
显示页面 splashActivity
- 布局: 相对布局
- 显示一个logo(这里直接用文字替带)
- 右下角显示一个3s倒计时
代码中有解释,完整代码在最后
private int time = 3; //1. 右下角显示的数字
private static final int SLPAHTIME = 0; // 消息ID
// 2. 启动一个线程,延时1s开始发送空消息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
tv_splash_time = (TextView) this.findViewById(R.id.tv_splash_time);
new Thread(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessageDelayed(SLPAHTIME, 1000);
}
}).start();
}
// 3. handler处理发送的消息,更新UI
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SLPAHTIME:
--time;
if (time < 0) {
startMainActivity(); // 跳转到新的activity,并且finish()当前activity
} else {
tv_splash_time.setText(time + ""); // 更新UI
}
handler.removeMessages(SLPAHTIME);
handler.sendEmptyMessageDelayed(SLPAHTIME, 1000);
break;
}
}
};
主页面显示
主页面界面
- Title
- framelayout
- RadioGroup
主要代码说明
使用线性布局,
framelayout需要使用权重
,RadioGroup的所有组件必须有id
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.ycxy.ymh.autoroom.activity.MainActivity"> <!-- 1. 使用include清爽界面且能.. --> <include layout="@layout/titlebar" /> <!-- 2. 替换baseFragment --> <FrameLayout android:id="@+id/frame_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"> </FrameLayout> <!-- 3. 切换选项 --> <RadioGroup android:id="@+id/rg_main" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="48dp"> <RadioButton android:id="@+id/rg_main_pager" style="@style/botttom_tag_style" android:text="首页" /> <RadioButton android:id="@+id/rg_main_per" style="@style/botttom_tag_style" android:text="个人" /> </RadioGroup> </LinearLayout>
主页面的切换
具体实现
- 创建一个 BaseFragment继承Fragment(android.support.v4.app.Fragment;)
public abstract class BaseFragment extends Fragment { protected Context mContext; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { return initView(); } // 强制子类重写 protected abstract View initView(); // activity加载完成后开始初始化数据 @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); } protected void initData(){ } }
- 创建集成basefragment的子类, MainPagerActivity(首页) 和 PerInfoActivity(个人)
- MainActivity中写切换逻辑(继承FragmentActivity)
public class MainActivity extends FragmentActivity { private RadioGroup rg; private List<BaseFragment> mBaseFragment; /** * 选中的Fragment的对应的位置 */ private int position; /** * 上次切换的Fragment */ private Fragment mContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化View initView(); //初始化Fragment initFragment(); //设置RadioGroup的监听 setListener(); } private void setListener() { rg.setOnCheckedChangeListener(new MyOnCheckedChangeListener()); //设置默认选中常用框架 rg.check(R.id.rg_main_pager); } class MyOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.rg_main_pager://常用框架 position = 0; break; case R.id.rg_main_per://第三方 position = 1; break; default: position = 0; break; } //根据位置得到对应的Fragment BaseFragment to = getFragment(); //替换 switchFrament(mContent, to); } } /** * @param from 刚显示的Fragment,马上就要被隐藏了 * @param to 马上要切换到的Fragment,一会要显示 */ private void switchFrament(Fragment from, Fragment to) { if (from != to) { mContent = to; FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); //才切换 //判断有没有被添加 if (!to.isAdded()) { //to没有被添加 //from隐藏 if (from != null) { ft.hide(from); } //添加to if (to != null) { ft.add(R.id.frame_main, to).commit(); } } else { //to已经被添加 // from隐藏 if (from != null) { ft.hide(from); } //显示to if (to != null) { ft.show(to).commit(); } } } } /** * 根据位置得到对应的Fragment * * @return */ private BaseFragment getFragment() { BaseFragment fragment = mBaseFragment.get(position); return fragment; } private void initFragment() { mBaseFragment = new ArrayList<>(); mBaseFragment.add(new MainPagerActivity());//常用框架Fragment mBaseFragment.add(new PerInfoActivity());//第三方Fragment } private void initView() { setContentView(R.layout.activity_main); rg = (RadioGroup) this.findViewById(R.id.rg_main); } }
个人信息页面
具体功能以后更新
遇见问题
安装的时候很费时间,应该直接点击下一步。
Android studio快捷键 ctrl+space : 提示
以后更新 …..