Android Design Support Library

2023-05-16

1.Navigation View

对于应用程序,它代表着一个标准的导航菜单。菜单内容可以由菜单资源文件填充。

NavigationView通常放在一个DrawerLayout里面。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    
    <!-- your content layout -->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layoutManager="LinearLayoutManager" />

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/drawer" />
</android.support.v4.widget.DrawerLayout>

这里有两个需要注意的属性:
app:headerLayout="@layout/drawer_header"(可选的)控制着header的布局,app:menu="@menu/drawer"是菜单资源用于填充导航的条目(可以在运行的时候更新)。

/res/layout/drawer_header.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:background="?attr/colorPrimary"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">


    <ImageView
        android:id="@+id/drawer_header_portrait"
        android:layout_width="@dimen/size_90dp"
        android:layout_height="@dimen/size_90dp"
        android:layout_gravity="left|top"
        android:scaleType="centerInside"
        android:src="@drawable/me" />


    <TextView
        android:layout_width="@dimen/size_90dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="王诚宇"
        android:textColor="@android:color/white"
        android:textSize="@dimen/textSize_16sp" />


</LinearLayout>

最简单的抽屉菜单是一组可勾选的菜单条目的集合,/res/menu/drawer.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/navigation_item_1"
            android:checked="true"
            android:icon="@drawable/ic_home_2x"
            android:title="@string/navigation_item_1" />
        <item
            android:id="@+id/navigation_item_2"
            android:icon="@drawable/ic_message_2x"
            android:title="@string/navigation_item_2" />
    </group>
</menu>

被选中的条目将在导航抽屉中突出显示,以确保用户知道哪一个导航条目是当前选中的。

也可以在菜单中通过使用subheaders来分离菜单条目组:

<item
    android:id="@+id/navigation_subheader"
    android:title="@string/navigation_subheader">
    <menu>
        <item
            android:id="@+id/navigation_sub_item_1"
            android:icon="@drawable/ic_android"
            android:title="@string/navigation_sub_item_1"/>
        <item
            android:id="@+id/navigation_sub_item_2"
            android:icon="@drawable/ic_android"
            android:title="@string/navigation_sub_item_2"/>
    </menu>
</item>

要获得选中条目时的回调方法,可以通过NavigationView的
setNavigationItemSelectedListener()来设置。

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                if (item.getItemId() == R.id.navigation_item_1) {
                    //do something
                    return true;
                }
                return false;
            }
        });

onNavigationItemSelected()方法中提供了点击的MenuItem,可以处理选择事件,改变选择状态,加载新的内容,关闭抽屉,或者其它任何动作行为。

小技巧:

  • 通过NavigationView.setItemTextColor()设置条目文本颜色。
  • 通过NavigationView.addView(customeView)自定义NavigationView的布局。

监听打开和关闭事件


要监听drawer的打开和关闭事件,可以通过
DrawerLayout.setDrawerListener(new DrawerLayout.DrawerListene接口的实现类())来设置。DawerLayout.DrawerListener接口为drawer事件提供了回调方法,如 onDrawerOpened() 和 onDrawerClosed()方法。

然而,与其实现DawerLayout.DrawerListener接口,如果activity中含有action bar,可以继承ActionBarDrawerToggle类来代替。ActionBarDrawerToggle类实现了DawerLayout.DrawerListener接口,因此可以覆盖那些回调方法。

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, getToolbar(), R.string.open, R.string.close) {
            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getSupportActionBar().setTitle(R.string.menu);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getSupportActionBar().setTitle(R.string.detail);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }

        };
        mDrawerLayout.addDrawerListener(mDrawerToggle);

与应用程序图标一起打开和关闭


用户可以以一个滑动手势或指向屏幕左边缘来打开和关闭导航抽屉,如果使用了action bar,应该允许用户通过触摸应用程序图标来打开和关闭它。而且应用程序图标也应该用一个特殊的图标来指示导航抽屉的存在。这些操作完全可以用ActionBarDrawerToggle类来实现。

为了让ActionBarDrawerToggle工作,通过它的构造器创建对象,需要的参数有:

  • 持drawer的activity
  • DrawerLayout
  • 指示drawer的drawable资源
  • 描述“打开drawer”的string资源
  • 描述“关闭drawer”的string资源

另外还需要在activity生命周期方法中做一些操作:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.navigation_view, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Pass the event to ActionBarDrawerToggle, if it returns
        // true, then it has handled the app icon touch event
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle your other action bar items...

        return super.onOptionsItemSelected(item);
    }

DrawerLayout的Bug


如果直接使用android.support.v4.widget.DrawerLayout,会抛出
java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY异常。

EXACTLY表示:父容器已经检测出View所需要的精确大小,这个时候View的最终大小就是SpecSize(测量模式下的规格大小)所指定的值。它对应于LayoutParams中的match_parent和具体的数值这两种模式。(这里已经是给DrawerLayout指定了match_parent,然而没有用)

解决方案:

  • 指定DrawerLayout的大小
ViewGroup.LayoutParams params = mDrawerLayout.getLayoutParams();
        params.width = 屏幕宽度;
        params.height = 内容宽度;//除去StatusBar高度、ActionBar高度
        mDrawerLayout.setLayoutParams(params);
  • 重写DrawerLayout的onMeasure()方法
 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        widthMeasureSpec = MeasureSpec.makeMeasureSpec(
                MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY);
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(
                MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

2.Floating Action Button

floating action button 是一个在操作界面上表示主要动作的圆形按钮,设计库中的FloatingActionButton提供了一个单独的实现,它的默认颜色使用来自主题中的colorAccent。

这里写图片描述

floating action button 除了正常大小,还支持mini大小(fabSize=“mini”,为了配合与其它元素保持视觉连续性)。FloatingActionButton继承自ImageView,所以可以通过android:src或setImageDrawable()来设置显示的图标。

<android.support.design.widget.FloatingActionButton
        android:id="@+id/floating_action_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:onClick="onClick"
        android:src="@android:drawable/ic_menu_add"
        app:fabSize="mini"
        app:rippleColor="@android:color/holo_red_light" />

3.Snackbar

snackbar 提供了一个轻量级、快速反馈的操作。它显示在屏幕的底部,而且包含一个可选的单独的动作文本。在一定时间后会带着动画的方式自动从屏幕中消失。此外,也可以在时间到之前手动关闭它。

            Snackbar snackbar = Snackbar.make(v, "这是Snackbar!", Snackbar.LENGTH_LONG)
                    .setAction("取消", new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {

                        }
                    });
            snackbar.setActionTextColor(Color.RED);//设置动作文本颜色
            View sbView = snackbar.getView();//得到显示文本的View
            TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
            textView.setTextColor(Color.YELLOW);
            snackbar.show();

4.Tabs

通过tabs来切换不同的视图,对于material design 来说已经不是一个新概念了,它们和顶级层导航模式或组织不同内容类别(如不同曲风的音乐)是一样的。

这里写图片描述

设计库中的TabLayout实现了固定的(所有的tab均分视图的宽度)和滑动的(没有一个固定的大小,但可以水平滑动)tabs。在代码中添加tabs:

TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"))

然而,如果用ViewPager在tabs之间进行水平分页,可以直接从PagerAdapter的getPageTitle()创建tabs,然后通过setupWithViewPager()将两者结合起来。这确保tab选择事件触发时可以更新ViewPager,页面改变时可以更新选中的tab。

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
        tabLayout.setupWithViewPager(viewPager);
    private class ViewPagerAdapter extends FragmentPagerAdapter {


        private final String[] mTitles = {"音乐", "电影", "小说", "美术"};
        private List<Fragment> mFragments = new ArrayList<>(mTitles.length);

        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
            mFragments.add(your fragment);
            mFragments.add(your fragment);
            mFragments.add(your fragment);
            mFragments.add(your fragment);
        }

        @Override
        public int getCount() {
            return mTitles.length;
        }

        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mTitles[position];
        }

    }

CoordinatorLayout, motion, and scrolling


独特的视觉效果只是material design 的一部分:运动也是创建 material design 应用程序的重要的一部分。然而在material design 中有很多关于运动的部分,包括触摸波纹和意味深长的过渡,设计库中引进了CoordinatorLayout,它在子视图之间的触摸事件控制上提供了另外一种层级,这让设计库中的许多组件都可以利用它。

CoordinatorLayout and floating action buttons


一个很好的例子是当将FloatingActionButton作为CoordinatorLayout的子View,然后将CoordinatorLayout传递给调用Snackbar.make()的时候-snackbar 不会显示在floating action button上,而是FloatingActionButton会利用CoordinatorLayout提供的额外回调方法,在snackbar动画显示时向上移动,在snackbar动画消失时回到原来的位置,这仅支持Android 3.0或者版本更高的设备-不需要额外的代码。

CoordinatorLayout还提供了一个layout_anchor 属性,它和layout_anchorGravity属性一起,可以用来放置浮动的视图,如FloatingActiongButton,相对于其它的视图。

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:src="@android:drawable/ic_menu_add"
        app:fabSize="normal"
        app:layout_anchor="@id/app.bar.layout"
        app:layout_anchorGravity="bottom|right|end" />

CoordinatorLayout and the app bar


CoordinatorLayout其它主要的用例是关于app bar(以前为action bar)和滚动技巧。在布局中使用Toolbar,更容易自定义应用程序标志性部分的外观。设计库把这个带到了另一个层级:使用AppBarLayout可以让Toolbar和其它视图(TabLayout提供的tabs)对标记有ScrollingViewBehavior的相邻视图的滚动事件作出反应。因此,可以创建一个布局,如:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    app:contentScrim="?attr/colorPrimary"
    app:elevation="@dimen/size_2dp"
    app:statusBarBackground="?attr/colorPrimary">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:clipToPadding="true"
            android:fitsSystemWindows="true"
            android:minHeight="?attr/actionBarSize"
            app:elevation="@dimen/size_2dp"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

        <android.support.design.widget.TabLayout
            android:id="@id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>


现在,当滚动RecyclerView(ViewPager中的RecyclerView)的时候,AppBarLayout可以对有滚动标志的子View的进入(滚进屏幕)和退出(滚出屏幕)事件做出响应。标志包括:

  • scroll:这个标志应该为所有想在屏幕上滚动的视图设置-对于那些不使用这个标志的视图,将被固定在屏幕的顶部。
  • enterAlways:这个标志确保任何向下的滚动都将使这个View变得可见,从而实现“快速返回”模式。
  • enterAlwaysCollapsed:当View即声明了minHeight 又使用了这个标志,它将只显示它的最低高度(在“collapsed”情况下),当滚动的视图到达它的顶部时将扩大它的整个高度。
  • exitUntilCollapsed:这个标志会造成View在存在之前一直滚动直到它收拢(显示它的最小高度)。
注意:所有使用scroll标志的视图必须在不使用标志的视图之前声明。这才能够确保所有View能够在顶部退出,留下固定的元素。 效果图 效果图

Collapsing Toolbars


直接将Toolbar添加到AppBarLayout中,可以访问enterAlwaysCollapsed和exitUntilCollapsed标志,但是不能访问不同元素对收拢做出反映的详细控制。为此,可以使用CollapsingToolbarLayout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app.bar.layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/size_256dp"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing.toolbar.layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:title="@string/coordinator_layout">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/me"
                app:layout_collapseMode="parallax" />

            <android.support.v7.widget.Toolbar
                android:id="@id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                android:clipToPadding="true"
                android:fitsSystemWindows="true"
                android:minHeight="?attr/actionBarSize"
                app:elevation="@dimen/size_2dp"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:id="@+id/coordinator_layout_description"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="@dimen/activity_horizontal_margin"
            android:textSize="@dimen/textSize_18sp" />
    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:src="@android:drawable/ic_menu_add"
        app:fabSize="normal"
        app:layout_anchor="@id/app.bar.layout"
        app:layout_anchorGravity="bottom|right|end" />
</android.support.design.widget.CoordinatorLayout>
效果图 效果图

当view收拢的时候,CollapsingToolbarLayout的
app:layout_collapseMode="pin"可以确保Toolbar依然固定在屏幕的顶部。更好的是,当CollapsingToolbarLayout和Toolbar一起使用的时候,在布局全部显示时标题自动变大,收拢时过渡到它的默认大小。但需要注意的是,标题是通过CollapsingToolbarLayout的setTitle()来设置,而不是Toolbar。

除了固定一个view以外,还可以使用app:layout_collapseMode=“parallax” (可以选择app:layout_collapseParallaxMultiplier=“0.7” 来设置视差乘数)来实现视差滑动(如CollapsingToolbarLayout中的ImageView)。对CollapsingToolbarLayout来说,这个使用例子与app:contentScrim="?attr/colorPrimary"属性配对会更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Design Support Library 的相关文章

  • 混合应用程序开发(PhoneGap、Cordova、Ionic)

    我试图了解一切是如何运作的 但对此主题有一些疑问 我将解释我如何理解这些东西 首先让我们从Cordova这是翻译平台JS CSS HTML文件到本机应用程序中 但这并不完全是事实 实际上 它只是将所有 html css 文件放入 asset
  • 如何在 Android 中从服务器检索数据时更新滚动的 ListView?

    目前 我正在使用 AsyncTask 来处理 Http 连接并以 JSON 格式检索数据 加载所有数据很简单 但会消耗太多时间 因此我决定使用一次加载 10 个项目LIMIT OFFSET mysql 接下来我设置事件onScroll为我的
  • Android 上的透明视频

    有什么办法让Android播放带有透明区域的视频吗 当我尝试在 VideoView 中播放包含透明区域的 WebM 视频时 视图的背景保持黑色 我希望看到透明区域上显示的父视图的背景 而不是黑色 到目前为止 我发现的唯一可行的解 决方案是从
  • 主应用程序下载另一个应用程序然后使用它

    What I want to do is maybe hard to explain or to understand so I made a quick drawing 首先 我们有 2 个 Android 应用程序 一个显示器 你好世界
  • 无法使用 Android 版 VLC 设置字幕

    启动 Android 版 VLC 的 VideoPlayerActivity 时 我在设置字幕位置时遇到问题 我的目标是 API 27 并使用 FileProvider 来允许访问文件 根据文档here https wiki videola
  • 屏幕关闭时接近传感器不起作用?

    Hy 我有一个与接近传感器相关的问题 当我将手指放在上面时 我想关闭屏幕 当我拿开手指时 我想打开屏幕 我成功地完成了关闭部分 但是当我将手指从传感器上移开时 它似乎没有执行 onSensorChanged 方法 这是它的代码 public
  • 检查互联网连接是否可用?

    我正在开发在线应用程序 问题 当互联网关闭或不可用时 它会给我错误 强制关闭 我尝试使用broadCast Receiver进行处理 但没有满足确切的解决方案 正在寻找更好的解决方案 public class MyBroadcastRece
  • 找不到 com.mapbox.mapboxsdk:mapbox-android-accounts:0.7.0。全新安装 MapBox

    我建立了一个新的反应本机项目并添加了 Mapboxyarn add react native mapbox gl maps This 请注意 如果您使用默认的 Mapbox Android SDK 包含在此库中 并且使用较新的 Androi
  • 调试 Android 库中的本机代码

    我的工作空间布局是 ApplicationLibrary AndroidManifest xml jni libs src Application AndroidManifest xml ant properties 如何在 Eclipse
  • 设置数据漫游开/关

    如何在 Android 应用程序中以编程方式设置数据漫游开 关 提前为重新打开一个死帖子表示歉意 但我已经通过调用此可执行文件成功实现了它 su c settings put global data roaming0 1 另外 要获取第一张
  • 当互联网连接丢失时,不间断地读取输入流

    我使用异步任务来下载文件 它正常工作 直到我关闭我的 Android 的 wifi 连接 没有其他互联网连接 下载对话框仍然存在并且没有任何变化 当我检查日志时 我发现输入流的函数 read 不停顿 那么如何检查这个案例呢 这是我的代码 U
  • Android快速查找网络上所有本地设备

    我正在制作一个 Android 应用程序 需要能够查看本地网络设备 名称或 IP 目前我可以扫描网络并找到设备的本地IP 然而 由于时间太长 用户在搜索网络时会看到黑屏加载几分钟 这是我当前正在使用的代码 private ArrayList
  • 如何在 Android RecyclerView 中显示一组项目的日期/日期

    您好 我在 JSONArray 中获取数据如下 chatArray msg id 193 user id 15235 first name Vishal user name vishal13 message twilio chat time
  • LibGDX - 着色器适用于桌面但不适用于 Android

    我编写了一个简单的程序 可以在 3D 环境中渲染球体 并根据球体周围的四个光源为其着色 当我在桌面上运行该程序时 它工作得很好 但在 Android 设备上 球体只是纯色的 下面是一些图片来说明我正在谈论的内容 gt Desktop gt
  • 读取Android文件系统中的所有文件

    我正在编写一个Android mediaPlayer应用程序 所以我想扫描整个手机上的所有文件 即sd卡和手机内存 我可以从 SD 卡读取数据 但不能读取它的根目录 也就是说 我可以从路径中读取 sdcard folder 它工作得很好 但
  • 将自定义文件与我的 Android 应用程序关联

    我想将特定扩展名的文件 例如任何扩展名为 xyz 的文件 与我的应用程序关联 这意味着 当用户在文件资源管理器 或其他地方 如 gmail 驱动器等 中点击 SaveFile1 xyz 时 我的应用程序应该启动 并且文件的 Uri 将在 I
  • 在android中重叠屏幕

    在下面的布局中 我有一个名为扫描设备的文本视图 其中显示设备名称 但我的设备列表显示在屏幕上方 任何人都可以帮助我如何滚动视图应该在设备列表内 滚动屏幕时 它显示设备列表 但它显示在屏幕上方 想要显示在屏幕内
  • 谷歌放置片段上的Java空指针异常

    当我尝试尝试自动完成位置功能时 出现空指针异常 我像文档中一样添加了片段 并需要帮助来解决这个问题 谢谢 主要活动 package com example srinivas mapautocompletetest1 import andro
  • 如何以编程方式获取 Android 项目(非设备)中支持的语言列表

    在一些项目中我们可能会出现这种情况 如何以编程方式获取此应用程序 项目支持的语言列表 结果我需要这样的字符串数组 en bg bs da de hr it nl pl pt sk sr tr 当然 我可以通过键入它来对其进行硬编码 但我认为
  • 查找手动注册(混淆)的本机函数地址

    我试图理解一个 Android 应用程序 其中包含一个名为foo在班上com app Bar 课堂内Bar有一个加载共享对象的静态子句System loadLibrary libfoo so 我认为是用它构建的 f可见性 隐藏 https

随机推荐

  • 盘点 | 2023年最值得学的编程语言TOP 5,Python再度夺冠!

    前言 在技术的推动发展中 xff0c 编程语言的作用功不可 目前在技术领域约有600种语言 xff0c 人们对编程语言的认识和掌握情况每年都在变化 与此同时 xff0c 新兴的编程语言往往具有引人注目的元素和功能 2023年热门的编程语言有
  • python socke ftp功能实现 shell命令,上传,下载

    python socke ftp功能实现 shell命令 xff0c 上传 xff0c 下载 网上教程多 xff0c 但是都不全 xff0c 只有下载代码 本人练习 xff0c 附加了注释 xff0c 帮助新人练习 一定要吃透socket来
  • jumpserver 修改源码实现密钥+密码

    背景 云主机登录 密钥 43 密码 xff0c jumpserver登录只能配置自动登录 xff0c 或者手动登录不能满足 修改 如果设置密码为chongzhi 就必须重新录入密码 vi opt coco coco proxy py 39行
  • uml学习过程7-顺序图

    描述强调消息时间顺序的交互图 对象 对象生命周期 消息 对象创建与销毁 动态建模 xff1a 顺序图 圆柱 xff1a 调用类 不表达逻辑判断 xff1a 例如 密码错误 xff0c 非空判断 这些用于活动图表达
  • springmvc错误跳转页面

    在做一个项目的时候 xff0c 为了界面美观及用户体验 xff0c 我们往往会设计自己的错误跳转页面 xff0c 而不是直接展示给用户一堆错误码 xff0c 为此我们需要配置自己的错误跳转页面 1 项目结构 2 web xml lt DOC
  • 下载进度条

    span class token doctype span class token punctuation lt span span class token doctype tag DOCTYPE span span class token
  • 域名绑定到github主页

    最近在通过网上的教程搭建自己的github主页 xff0c 虽然现在也是半成品 xff0c 但是其中有一些步骤以及参考的连接还是值得分享一下的 首先在godaddy上购买的 com域名 xff0c 因为看见大家都说购买国内的域名需要备案之类
  • c++面试宝典

    目录 一 多线程 二 指针 三 字符串 四 面向对象 五 基本用法 六 c 43 43 11 七 算法 c 43 43 面试必考多线程 xff0c 内存 xff08 智能指针 xff09 xff0c 常见算法 xff0c 设计模式 一 多线
  • ssh远程执行命令的方法

    设置免密登录之后 xff0c 通常ssh remote ip command 就可以方便的执行远程命令 如果遇到包含单引号或者双引号的命令 xff0c 执行不成功 xff0c 如 xff1a awk F 39 39 39 print 1 3
  • [海外上架必备][Android]Google原生代码崩溃符号生成的问题

    默认情况下 xff0c 原生代码库已从应用的发布 build 中移除 此移除操作包括移除应用所使用的所有原生库中包含的符号表及调试信息 移除原生代码库会显著缩减大小 xff1b 但是 xff0c 由于缺少信息 xff08 例如类和函数名称
  • “应版权方要求,文件无法下载”的解决方案

    应版权方要求 xff0c 文件无法下载 的解决方案 参考文章 xff1a xff08 1 xff09 应版权方要求 xff0c 文件无法下载 的解决方案 xff08 2 xff09 https www cnblogs com easyide
  • 分布式系统核心—日志

    分布式系统的核心组件 日志 有时也叫write ahead logs commit logs 或者事物 logs 通常指在应用所有的修改之前先写入日志 xff0c 一般会将重放日志 撤销日志都写进去 NoSQL数据库 KV存储 Hadoop
  • ctags使用方法 ctags的使用方法

    用 ctags 看代码时 xff0c 检索函数及变量使用的文件是 tags 文件 有时我们会定制检索的文件范围 xff0c 这时候就可以通过 ctags 命令的一些参数来控制 tags 文件的内容 1 xff1a 递归检索当前目录以下所有默
  • AFNetworking 介绍和简单实用

    AFNetworking github AFNetworking AFNetworking 是一个网络请求封装框架 xff0c 使用简单 xff0c 功能强大 xff1b 在AFNetworking 3 x版本 通过封装NSURLSessi
  • Tomcat端口冲突的解决方法

    1 输入以下两条命令 span class ruby span class hljs number 1 span dos窗口中输入 xff1a netstat ano findstr span class hljs number 8080
  • Spring 框架介绍和使用

    微信公众号 xff1a 运维开发故事 xff0c 作者 xff1a 老郑 历史的选择 Spring 作为一个基础的框架 xff0c 是在 Java EE 开发历史中 xff0c 是成千上万公司选择 单独使用 Spring 的非常少了 xff
  • xshell无法调用图形化的解决方法

    在xshell无法调用图形化界面 xff0c 使用VNC服务 xshell中调用图形化界面需要2个地址互通 xff0c 只有一端通无法传输图形化界面 xff08 本地没有获取IP xff09 但是vnc只需要和服务器端连通即可 1 首先我们
  • python3+requests请求方式application/x-www-form-urlencoded传递数组Arrary

    python3 43 requests传递比较简单的key value格式数据比较简单 导入 requests 包 import requests 表单参数 xff0c 参数名为 fname 和 lname myobj 61 39 fnam
  • 用Java远程执行shell命令出现java: command not found

    一 问题发现 xff1a 在使用jsch远程调用shell命令时 xff0c 提示java command not found 这个错误的意思是linux的环境变量里没有配置JAVA HOME的内容 但是我在Linux上查看了一下环境变量
  • Android Design Support Library

    1 Navigation View 对于应用程序 xff0c 它代表着一个标准的导航菜单 菜单内容可以由菜单资源文件填充 NavigationView通常放在一个DrawerLayout里面 lt xml version 61 34 1 0