Android 开发
跟不上了 弃坑
15.activity和fragment通信 回调接口
创建一个ifragemntcallback{ activity ->fragment }{ activity<-fragment }
interface ifragemntcallback{
void sendmsgtoactivity(String sting);
string getmsgfromactivity(string msg);
}
activity 中 new一个fragemnetcallback
bf.setfragemntcallback(new ifragemntcallback)
{
public void sendmsgtoactivity(String sting){}
public string getmsgfromactivity(string msg){}
}
fragment中
private ifragmentcallbakc fragmentallback;
public void setfragemntcallback(ifragemntcallback callback)
{
fragmentallback =callback;
}
15.activity和fragment通信
Bundle 可以绑定数据的独立的类
14.fragment 的产生
多个activity 使用同一个fragment
同时独立接受输入
但是生命周期受限于委托activity
fragment 使用方法
mainactivity.xml
添加一个空白的fragment 类 其中oncreate 和onCreateview 是生命周期函数
fragment 解析xml 和activity 有点不同
activity 在oncreate view 中解析
public class BlankFragment extends Fragment {
private View root;
private Button button;
private TextView textview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
if(root == null){
root=inflater.inflate(R.layout.fragment_blank, container, false);
}
textview=root.findViewById(R.id.tv);
button=root.findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//注意这里是对象的方法 不是id.方法
textview.setText("i am fine thank you and you");
}
});
return root;//注意返回root??????
}
}
在一个activity 中田间两个fragment
xml
<Button
android:id="@+id/btn1"
android:text="@string/change"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn2"
android:text="@string/replace"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2222ff"
android:id="@+id/frgmt">
</FrameLayout>
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = findViewById(R.id.btn1);
Button btn2 = findViewById(R.id.btn2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
//之前用的是btn1.setOnClickListener new 匿名内部类
//extends AppCompatActivity implements View.OnClickListener 然后implement 类来实现 这个函数
public void onClick(View view) {
switch (view.getId())
{
case R.id.btn1:
replaceFragment(new BlankFragment1());
//自己创建这个函数
//new 一个fragment 对象 所以需要新建frament class
break;
case R.id.btn2:
replaceFragment(new ItemFragment());
//自己创建这个函数
//new 一个fragment 对象 所以需要新建frament class
break;
}
}
//这个函数做的事情 就是将参数 fragement 替换到mainactivity中的fragment布局
private void replaceFragment(Fragment fgmt) {
//经过 管理器 触发器
FragmentManager fm=getSupportFragmentManager();
FragmentTransaction fts=fm.beginTransaction();//触发器
fts.replace(R.id.frgmt,fgmt);
//fts 中间会有一个管理栈 用于存储页面
fts.commit();//最后还需要提交事件
}
}
13.viewpage
先创建两个layout
然后添加一个viewpage
然后需要新建要给adaptor
mainactivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LayoutInflater lf=getLayoutInflater().from(this);
View view1=lf.inflate(R.layout.layout1,null);
View view2=lf.inflate(R.layout.layout2,null);
View view3=lf.inflate(R.layout.layout3,null);
List<View> viewList =new ArrayList<>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
ViewPager viewPager =findViewById(R.id.vp);
myadapter mad=new myadapter(viewList);//这里的adapter 是自己构建方法
viewPager.setAdapter(mad);
getLayoutInflater().from(this);
}
}
自己的adapter 类
public class myadapter extends PagerAdapter {
private List<View> mylistview;
public myadapter(List<View> mylistview) {
this.mylistview = mylistview;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(mylistview.get(position),0);
return mylistview.get(position);
}
@Override
public int getCount() {
return mylistview.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(mylistview.get(position));
}
}
12 22-2 跳过
11. linerlayout
10.popupwindow 跳过
9.对话框
可以在layout中自定义view
8.toolbar
toolbar 就是替换actionbar的 noActionbar
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar td=findViewById(R.id.td);
td.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Log.e(TAG, "onClick: toolbarl is colicked" );
String TAG="zhekun";
Log.e(TAG, "onClick: toolbarl is colicked");
}
});
<androidx.appcompat.widget.Toolbar
android:id="@+id/td"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#00ddff"
app:logo="@drawable/mail"
app:navigationIcon="@drawable/back_24"
app:title="Detail"
app:titleMarginStart="150dp"
app:titleTextColor="@color/black"/>
标题居中
7.通知管理器 跳过
6.progressbar
进度条1
进度条样式2
添加一个onclick load
interminate 只会显示滚动 不显示进度
5.imageview
点击切换图片
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView ssrc= findViewById(R.id.src);
ssrc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
count++;
if(count%2==1) {
ssrc.setImageResource(R.drawable.b);
}else
{
ssrc.setImageResource(R.drawable.a);
}
}
});
4.edittext
background 是那根横线
padding 是内容和边框的填充距离
3.button
linerlayout height
button 200dp 100dp 点进去发现是继承自textview
两个selector 写法类似 state_press 就是按下的状态
还有就是 这个theme似乎要修改一下才有变化
new drawable file
图片选择器 selector <item android:drawable[img]
第一个 stated press true 按下的状态 是显示第一张照片
然后调用 这个资源
同时颜色选择器 一样的写法
新建一个color文件夹 添加选择器
button的三个事件
private static final String TAG = “zhekun” ;
可以添加函数区间的变量
自己写的方法 onclick 需要注释掉 clicklistener
2.跑马灯实现TEXTVIEW
注意文字的写法,实在res 文件夹中
重点是文字够长,同时宽带设置为matchparent
但是会自动换行所以需要 singleline 还有修改他的省略方式 marquee 还有marqueeilimt
这些是省略号的位置
还要设置不同的获取焦点的位置 以及一个属性clickable=true//或者自定义textview
自定义textview
继承自textview 同时实现前面三个构造方法
并且重写isfocused return true
同时界面元素 也要修改了 用自定义的名字
第三种方法是在界面xml添加一个属性
2.1
方法一
<TextView
android:layout_width="match_parent"
android:text="@string/hello"
android:layout_height="200dp"
android:height="200dp"
android:textSize="100sp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
>
<requestFocus/>
1.textview控件
快捷键写法
<LinerLayout><>
wi 回车
alter enter ->rerannge attribuate 调整布局
<LinerLayout layout width/height /orientation 容器
textview 控件 layout_width
layout_height control+leftmouse 跳转属性
dp / mathchparent(与容器同样大)
<Textview
android:id="@id/tv_one" java代码获取空间对象的方法
android:text="hello world" control+滚轮 设置大小
android:layout_height ="200dp"
android:tayout_height ="200dp"
android:textsize ="200sp" 百分比的单位
android:textcolor ="@color/red "或者 #FF003322
java 代码中也可以设置 同时优先级高
<fragment
android:id="@+id/fgmt"
android:name="com.example.fragment.BlankFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>