android.support (一)

AndroidX

Existing packages, such as the Android Support
 Library, are being refactored into AndroidX.
Although Support Library versions 27 and lower 
are still available on Google Maven,

all new development will be included in only AndroidX versions 1.0.0 and higher.

AndroidX 是对 android.support.xxx 包的整理后产物。

 

常用包对应关系

com.android.support:support-compat            androidx.core:core:1.0.0+

com.android.support:appcompat-v7              androidx.appcompat:appcompat:1.0.0+

com.android.support:design                          com.google.android.material:material:1.0.0+

com.android.support:multidex                       androidx.multidex:multidex:2.0.0+

com.android.support:recyclerview-v7           androidx.recyclerview:recyclerview:1.1.0

com.android.support:viewpager                    androidx.viewpager:viewpager:1.0.0+

com.android.support:support-fragment         androidx.fragment:fragment:1.0.0+

 

AppcompaActivity相对于Activity的主要的两点变化;

主界面带有toolbar的标题栏;

theme主题只能用android:theme=”@style/AppTheme (appTheme主题或者其子类),而不能用android:style。 否则会提示错误: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

toolbar就是actionbar的进阶 返回箭头、图标、标题、菜单、搜索框

 

 ※Fragment

而如果要使用support库的Fragment,Activity必须要继承FragmentActivity(FragmentActivity是的AppCompatActivity子类)。





  public void onAttach(Context context) {

        mActivity = (Activity) context;

        mParam = getArguments().getString(ARG_PARAM);  //获取参数

    }

生命周期

onAttach ->onCreate -> onCreateView->onActivityCreated->onStart->onResume->Runing

Runing->onPause->onStop->onDestroy->onDetach

使用getSupportFragmentManager()获取FragmentManager。

例子:viewpager与fragment的简单实用用例

listfragment = new ArrayList<Fragment>();
f1 = new L2Fragment();
f2 = new A2Fragment();
listfragment.add(f1);
listfragment.add(f2);
FragmentManager fm = getSupportFragmentManager();
MainFragmentPagerAdapter mfpa = new MainFragmentPagerAdapter(fm, listfragment); mainviewpager.setAdapter(mfpa);
f1.setLLdotListenner(this);

 

Fragment也有类似的栈,称为回退栈(Back Stack),回退栈是由FragmentManager管理的。

 

Fragment向Activity传递数据

首先,在Fragment中定义接口,并让Activity实现该接口(具体实现省略):

public interface OnFragmentInteractionListener {    void onItemClick(String str);  //将str从Fragment传递给Activity}

在Fragment的onAttach()中,将参数Context强转为OnFragmentInteractionListener对象:

public void onAttach(Context context) {

    super.onAttach(context);

        if (context instanceof OnFragmentInteractionListener) {

        mListener = (OnFragmentInteractionListener) context;

    } else {

                throw new RuntimeException(context.toString()

                + " must implement OnFragmentInteractionListener");

    }}

并在Fragment合适的地方调用mListener.onItemClick("hello")将”hello”从Fragment传递给Activity。

Activity向Fragment传递数据

Activity向Fragment传递数据比较简单,获取Fragment对象,并调用Fragment的方法即可,比如要将一个字符串传递给Fragment,则在Fragment中定义方法:

public void setString(String str) {

    this.str = str;}

并在Activity中调用fragment.setString("hello")即可。

 

 

 ※Viewpager

ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
ViewPager类需要一个PagerAdapter适配器类给它提供数据。
ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

FragmentPagerAdapter 和 FragmentStatePagerAdapter的区别

在使用Fragment来适配ViewPager的时候,我们可以选择FragmentPagerAdapter 或者FragmentStatePagerAdapter作为适配器。

FragmentPagerAdapter

FragmentPagerAdapter继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。如文档所述,该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter

FragmentStatePagerAdapter

FragmentStatePagerAdapter和前面的 FragmentPagerAdapter 一样,是继承子 PagerAdapter。但是,和 FragmentPagerAdapter 不一样的是,正如其类名中的** 'State'** 所表明的含义一样,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大量的内存。

例子:

//viewpager的适配器
public class MainFragmentPagerAdapter extends FragmentStatePagerAdapter {

    private FragmentManager fragmetnmanager;  //创建FragmentManager
    private List<Fragment> listfragment; //创建一个List<Fragment>

    public MainFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
        super(fm);
        this.fragmetnmanager = fm;
        this.listfragment = list;
    }

    @Override
    public Fragment getItem(int arg0) {
        return listfragment.get(arg0); //返回第几个fragment
    }

    @Override
    public int getCount() {
        return listfragment.size(); //总共有多少个fragment
    }

}

 

翻页动画继承

DepthPageTransformer implements ViewPager.PageTransformer

重写transformPage(View view, float position)

 

 ※Palette

从bitmap中获取调色板,获取主色调

例子:

Bitmap bitmap = drawableToBitmap(commonUsedAppModel.getIcon());
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(@Nullable Palette palette) {
        Palette.Swatch s = palette.getVibrantSwatch();
        if (s == null) {
            for (Palette.Swatch swatch : palette.getSwatches()) {
                s = swatch;
                break;
            }
        }
        bg_im.setImageDrawable(new ColorDrawable(s.getRgb()));
    }
});

 

Palette.Swatch s = palette.getDominantSwatch();//独特的一种

Palette.Swatch s1 = palette.getVibrantSwatch();       //获取到充满活力的这种色调

Palette.Swatch s2 = palette.getDarkVibrantSwatch();    //获取充满活力的黑

Palette.Swatch s3 = palette.getLightVibrantSwatch();   //获取充满活力的亮

Palette.Swatch s4 = palette.getMutedSwatch();           //获取柔和的色调

Palette.Swatch s5 = palette.getDarkMutedSwatch();      //获取柔和的黑

Palette.Swatch s6 = palette.getLightMutedSwatch();    //获取柔和的亮

利用采集的色调样本swatch对象给需要的东西赋予颜色了,有如下几个方法:

getPopulation():    the amount of pixels which this swatch represents.

getRgb():    the RGB value of this color.

getHsl():    the HSL value of this color.

getBodyTextColor():   the RGB value of a text color which can be displayed on top of this color.

getTitleTextColor():   the RGB value of a text color which can be displayed on top of this color.

 

 ※NestedScrollView

NestedScrollView 即 支持嵌套滑动的 ScrollView。可以方便的直接嵌套recycleview,而不用担心滑动冲突问题。

 ※CardView

卡片效果,圆角、阴影。

例子:

<android.support.v7.widget.CardView

        android:id="@+id/card_view"

        android:layout_width="match_parent"

        android:layout_height="100dp"

        android:layout_gravity="center"

        android:layout_marginLeft="10dp"

        android:layout_marginRight="10dp"

        android:layout_marginTop="10dp"

        app:cardCornerRadius="5dp">



        <TextView

            android:id="@+id/ext"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:gravity="center"

            android:text="CardView"

         />

</android.support.v7.widget.CardView>

 ※FloatingActionButton

悬浮按钮

 

 ※PermissionChecker

checkCallingOrSelfPermission(Context context, String permission)

检查您正在处理的IPC或您的应用是否具有给定权限,以及是否允许与此权限相对应的应用操作。

checkCallingPermission(Context context, String permission, String packageName)

检查您正在处理的IPC是否具有给定权限,以及是否允许与此权限相对应的应用程序操作。

checkPermission(Context context, String permission, int pid, int uid, String packageName)

检查UID和PID中的给定包是否具有给定权限以及是否允许与此权限对应的应用操作。

checkSelfPermission(Context context, String permission)

检查您的应用是否具有给定的权限以及是否允许与此权限相对应的应用操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值