Android ToolBar 简单使用 介绍 按照效果图,从左到右分别是 导航栏图标 App Logo 标题 子标题 自定义控件 (Clock) ActionMenu 接下来我们制作这个页面 activity 布局文件 在 layout/activity_toolbar.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"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/color_0176da"> <!--自定义控件--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Clock" /> </android.support.v7.widget.Toolbar> </LinearLayout> menu 菜单文件 在 menu/toolbar_menu.xml 中,这里记得新建 menu 资源文件夹 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@id/action_search" android:icon="@mipmap/ic_search" android:title="@string/menu_search" app:showAsAction="ifRoom" /> <item android:id="@id/action_notification" android:icon="@mipmap/ic_notifications" android:title="@string/menu_notifications" app:showAsAction="ifRoom" /> <item android:id="@+id/action_item1" android:title="@string/item_01" app:showAsAction="never" /> <item android:id="@+id/action_item2" android:title="@string/item_02" app:showAsAction="never" /> </menu> 这里我们通过设置 showAsAction 来确定 menu item 的位置 ifRoom 如果工具栏由剩余空间,那么显示在工具栏中 never 显示在菜单弹出框中 设置 activity 的 ToolbarActivity 在 ToolbarActivity.
Android 样式与主题 设置样式 假设我们给一个按钮设置样式,在 res/values/style.xml 中 <style name="BeatBoxButton"> <item name="android:background">@color/dark_blue</item> </style> 在需要设置的按钮布局中 <Button style="@style/BeatBoxButton"/> 这样就完成了样式的设置 继承样式 样式支持继承,我们来继承上面的样式,创建一个新的样式 <style name="BeatBoxButton.Strong"> <item name="android:textStyle">bold</item> </style> 也可以使用 <style name="StrongBeatBoxButton" parent="@style/BeatBoxButton"> <item name="android:textStyle">bold</item> </style> 使用主题 主题也是一种样式,他必须继承自 Theme 下的主题,这里定义一个 style <style name="BoxButtonTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <item name="android:background">@color/black</item> <item name="android:textColor">@color/white</item> <item name="android:textStyle">bold</item> </style> 在 AndroidManifest.xml 中,在 activity 标签添加 <activity android:name=".MainActivity" android:theme="@style/BoxButtonTheme"> 这样以后,在 .MainActivity 下的所有控件都会使用 BoxButtontheme 主题中定义的样式 同理,在 application 标签添加主题,旗下的 activity 都会使用该主题
ViewPager ViewPager 简单来说就是一个能滑动切换视图的控件,由一个 Activity 包裹,总体结构是 Activity adapter fragment fragment fragment 其中 Activity 通过 adapter 来操作 fragment 显示 Activity 布局 activity_pageview.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <androidx.viewpager.widget.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout> PageViewActivity.java public class PageViewActivity extends FragmentActivity { MyPageAdapter pageAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_page_view); List<Fragment> fragments = getFragments(); pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments); ViewPager pager = (ViewPager) findViewById(R.id.viewpager); pager.setAdapter(pageAdapter); } private List<Fragment> getFragments() { List<Fragment> fList = new ArrayList<Fragment>(); fList.
Fragment 这篇笔记大部分参考自 这篇教程 什么是 Fragment Fragment 是 Activity 界面中的一部分,可理解为模块化的 Activity Fragment 不能独立存在,必须嵌入到 Activity 中 Fragment 具有自己的生命周期,接收它自己的事件,并可以在 Activity 运行时被添加或删除 Fragment 的生命周期直接受所在的Activity的影响。如:当 Activity 暂停时,它拥有的所有 Fragment 们都暂停 Fragment 有什么用 支持动态,灵活的界面设计 如何使用 Fragment 相关回调 onAttach 方法 Fragment和Activity建立关联的时候调用(获得activity的传递的值) onCreateView 方法 为Fragment创建视图(加载布局)时调用(给当前的fragment绘制UI布局,可以使用线程更新UI) onActivityCreated 方法 当Activity中的onCreate方法执行完后调用(表示activity执行oncreate方法完成了的时候会调用此方法) onDestroyView 方法 Fragment中的布局被移除时调用(表示fragment销毁相关联的UI布局) onDetach 方法 Fragment和Activity解除关联的时候调用(脱离activity) 静态添加 Fragment 首先需要创建一个 fragment 类,并为其创建布局文件 example_fragment.xml ,再将其配置到 activity_main.xml 中 example_fragment.xml 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:text="@string/example_fragment" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> FragmentLayoutTest.java 类文件 public class FragmentLayoutTest extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.
RecyclerView 这个 View 的使用当初我用的不是很明白,现在有点懂了,我们自顶向下设计 View 代码总览 在 MainActivity 中, @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); List<Integer> data = Stream.iterate(1, n -> n + 1).limit(100).collect(Collectors.toList()); CustomAdapter adapter = new CustomAdapter(data); RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 4); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(layoutManager); } 我们 定义了一个 RecyclerView 定义了一个 CustomAdapter 为 CustomAdapter 提供了数据 为 RecyclerView 设置 adapter 为 RecyclerView 设置 layoutmanager 注意,这里我们没用到 ViewHolder 这个东西,这个东西由 Adapter 操纵,相当于 RecyclerView Adapter ViewHolder ViewHolder ViewHolder ViewHolder 有关Adapter 定义 Adapter 需要继承 RecyclerView.
介绍 MLJFlux 就是 MLJ 框架对 Flux 的封装,由于我学不会 Flux ,所以我就退而求其次,学别人装好的工具 同学们可以参照这个 PlayGround 来学习 MLJFlux 其中 features 表示特征 hidden layers 表示隐藏层 learning rate 设置学习率 activation 设置每个神经元的激活函数 regularzation 设置正则化方法 regularzation rate 设置正则化惩罚力度 但在 MLJ 和 MLJFlux 中,你是找不到任何有关学习率的参数设置的,因为已经有方法可以不设置学习率了,具体参考这篇文章 在 MLJFlux 中,有以下几种模型 model type prediction type scitype(x) <: _ scitype(y) <: _ NeuralNetworkRegressor Deterministic Tale{Continuous} with n_in columns AbstractVectir{<:Continuous} n_out = 1 MultitargetNeuralNetworkRegressor Deterministic Table{Continuous} with n_in columns <: Table(Continuous) with n_out columns NeuralNetworkClassifier Probabilistic <:Table(Continuous) with n_in columns AbstractVector{<:Finite} with n_out classes ImageClassifier Probabilistic AbstractVector(<:Image{W,H}) with n_in = (W, H) AbstractVector{<:Finite} with n_out classes 他们的参数有 builder : Default = MLJFlux.