安卓开发学习笔记

目录

 

1. Button

2. EditText

3.ImageView

4.ProgressBar

5. ToolBar

6. AlertDialog

7.PopUpWindow

8. ListView

9. RecycleView

10. 动画

11. ViewPager

12. Fragment

Activity与Fragment通信


 

1. Button

(1)样式

改变Btutton样式可以通过设置控件background和backgroundTint、foreground(前景色会覆盖文字)引用响应的selector文件,设置按下和普通状态下的样式。

(2)事件处理

方式一 原生回调方法:

onClick() 点击事件

setOnLongClickListener( ) 长按事件

setOnTouchListener( ) 触摸事件

方式二 自定义方法 在xml文件里写然后创建自定义方法。

 

2. EditText

一些属性:

<EditText
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:hint="请输入"
        android:textColorHint="@color/purple_200"
        android:inputType="numberPassword"
        android:drawableLeft="@drawable/ic_baseline_emoji_people_24"
        android:drawablePadding="20dp"
        android:background="@color/black"/>

 

3.ImageView

<ImageView
        android:src="@drawable/rick1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxHeight="400dp"
        android:maxWidth="300dp"
        android:adjustViewBounds="true"/>

 

4.ProgressBar

<ProgressBar
        android:id="@+id/pb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:progress="50"
        android:indeterminate="true"
        >
    </ProgressBar>

 

5. ToolBar

<androidx.appcompat.widget.Toolbar
       android:id="@+id/tb"
       android:layout_width="match_parent"
       android:layout_height="?attr/actionBarSize"
       android:background="@color/purple_700"
       app:navigationIcon="@drawable/ic_baseline_arrow_back_ios_24"
       app:title="标题"
       app:titleTextColor="@color/white"
       app:titleMarginStart="100dp"
       app:subtitle="子标题"
       app:subtitleTextColor="@color/white"
       app:logo="@drawable/rick1"
       ></androidx.appcompat.widget.Toolbar>

 

6. AlertDialog

 

public void wqClick(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setTitle("我是对话框");
        builder.setMessage("今天天气怎么样?").
                setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("wq", "onClick: 确定");
                    }
                     }).
                setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("wq", "onClick: 取消");

                    }
                     }).
                setNeutralButton("中间", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("wq", "onClick: 中间");

                    }
                });
        builder.create().show();
    }

还可以设置setView

 

7.PopUpWindow

@SuppressLint("InflateParams") View popView = getLayoutInflater().inflate(R.layout.popwindow, null);
        PopupWindow popupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,false);
        popupWindow.showAsDropDown(view,100,100);

 

 

8. ListView

 

 

 

 

9. RecycleView

 

10. 动画

(1)逐帧动画

就是一张张的图片快速切换。

实现:通过animation-list 添加item及持续时间。

main_activity中:

java代码中调用:

 

(2)补间动画

主要是图片的状态变化。

(3)动画属性

 

11. ViewPager

首先创建三个layout

 

创建viewPager

<androidx.viewpager.widget.ViewPager
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ></androidx.viewpager.widget.ViewPager>

为ViewPage创建适配器

public class MyAdapter extends PagerAdapter {
    // 存放数据
    private List<View> mListView;

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        container.addView(mListView.get(position),0);
        return super.instantiateItem(container, position);
    }

    public MyAdapter(List<View> viewList){
        this.mListView = viewList;
    }
    public List<View> getmListView() {
        return mListView;
    }

    public void setmListView(List<View> mListView) {
        this.mListView = mListView;
    }




//    webpage中有多少个view
    @Override
    public int getCount() {
        return mListView.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(mListView.get(position));
    }
}

MainActivity代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 创建view的集合
        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);
        // 获取ViewPage
        View viewPger = findViewById(R.id.vp);

        MyAdapter myAdapter = new MyAdapter(viewList);
    }
}

 

 

12. Fragment

特点:

1. 具备自己的生命周期

2. 必须委托在activity中才能运行

3. 一个Acitivity中可以使用多个Fragment,一个Fragment也可以在多个Activity中使用。Activity中也可以在运行中动态的增加/删除。

创建两个Fragment并在MainActivity中引用:

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".BlankFragment1"
    android:orientation="vertical"
    >

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="@string/hello_blank_fragment"/>

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="button"
        ></Button>

</LinearLayout>

BlankFragment1.java

package com.wq.learning;

import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class BlankFragment1 extends Fragment {

    private View root;
    private TextView textView;
    private Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }


    /**
     * 和 Activity 不同的是,不能直接在onCreate函数中setContentView,
     * 而是要在onCreateView函数中创建解析器。
     * 和Acivity一样 可以响应各种事件。
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if (root == null)
            root = inflater.inflate(R.layout.fragment_blank1,container,false);
        textView = root.findViewById(R.id.textview);
        button = root.findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("set text");
            }
        });

        return root;
    }
}

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity">

<fragment android:name="com.wq.learning.BlankFragment1"
    android:id="@+id/fragment1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    ></fragment>

    <fragment android:name="com.wq.learning.BlankFragment1"
        android:id="@+id/fragment2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        ></fragment>
</LinearLayout>

 

动态管理Fragment

1. 在main_activity.xml中添加两个用来切换的button和装fragment的framelayout

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btn"
    android:text="change"
></Button>

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btn2"
    android:text="replace"
    ></Button>

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/framelayout"
    android:background="@color/purple_700"
    ></FrameLayout>

2. 分别创建两个Fragment

3. MainActivity中:

package com.wq.learning;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button button1;
    Button button2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = findViewById(R.id.btn);
        button2 = findViewById(R.id.btn2);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn:
                replaceFrament(new BlankFragment1());
            case R.id.btn2:
                replaceFrament(new BlankFragment2());
        }
    }

    private void replaceFrament(Fragment blankFragment) {
        // 获取默认的fragment管理类
        FragmentManager fragmentManager = getSupportFragmentManager();
        // 拿到管理类的触发器
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 把fragment1替换成framelayout里。
        fragmentTransaction.replace(R.id.framelayout, blankFragment);
        // 事务提交
        fragmentTransaction.commit();

    }
}

4. 如何将所有的Fragment添加到一个栈中?(可以依次返回)

在commit之前添加: transaction,addToBackStack(null);

动态管理Fragment的总结:

 

Activity与Fragment通信

原生方法:Bundle 一个独立的类,数据载体。

上述代码中的activity和fragment1如何进行通信的?

 

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btn:
            // 创建bundle
            Bundle bundle = new Bundle();
            bundle.putString("message","呵呵");
            BlankFragment1 blankFragment1 = new BlankFragment1();
            blankFragment1.setArguments(bundle);
            replaceFrament(blankFragment1);
        case R.id.btn2:
            replaceFrament(new BlankFragment2());
    }
}

 

在BlankFragment1.java中:

任何地方都可以使用传递的信息。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 拿到相应Activity的bundle
    Bundle bundle = getArguments();
    bundle.getString("message");

}

 

第二种方法:建立接口

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值