小编and*_*per的帖子

Android布局文件中的"工具:上下文"是什么?

从最新的ADT版本开始,我注意到布局XML文件上的这个新属性,例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" />
Run Code Online (Sandbox Code Playgroud)

什么是"工具:上下文"用于?

它怎么知道写在那里的活动的确切路径?它是否在清单中查看应用程序的包?

它仅限于扩展Context或仅扩展活动的类吗?它可用于ListView项目等吗?

xml android android-context android-layout android-tools-namespace

908
推荐指数
5
解决办法
23万
查看次数

为什么片段,何时使用片段而不是活动?

在Android API 11+中,Google发布了一个名为的新类Fragment.

在视频中,谷歌建议尽可能(link1,link2),我们应该使用片段而不是活动,但他们没有解释确切原因.

片段的目的是什么?它们的一些可能的用途(除了一些可以通过简单的视图/布局轻松实现的UI示例)?

我的问题是片段:

  1. 使用片段的目的是什么?
  2. 与使用活动/视图/布局相比,使用片段有哪些优缺点?

奖金问题:

  1. 你能为片段提供一些非常有趣的用途吗?谷歌在他们的视频中没有提到的事情?
  2. 片段与包含片段的活动之间进行通信的最佳方式是什么?
  3. 使用片段时要记住哪些最重要的事情?您的经验提示和警告?

android android-layout android-fragments android-3.0-honeycomb android-activity

451
推荐指数
7
解决办法
16万
查看次数

为Android运行新的英特尔模拟器

最近谷歌和英特尔发布了一种运行模拟器的新方法,它应该比以前的版本(模拟ARM CPU)好得多.以下是一些关于它的链接:这个这个.

但是,在安装新组件并按照说明创建新的模拟器配置后,我收到错误,我也看不到任何改进.我已经尝试过API 10和API 15,并启用了GPU并禁用了它们.这些配置都没有帮助.我也在两台不同的计算机上试过它并且没有得到任何提升(并且得到了相同的错误).

似乎在我读过的帖子上,没有人对它有任何问题,所有人都报告了更快的模拟器.

它显示的错误是:

emulator: Failed to open the HAX device!
HAX is not working and emulator runs in emulation mode
emulator: Open HAX device failed
Run Code Online (Sandbox Code Playgroud)

它为什么会发生,有没有办法解决它?有没有其他人得到这些错误,反之亦然?

顺便说一句,我有一个英特尔CPU,如果这可能是一个问题.


编辑:

这是我在BIOS中看到的,所以它应该可用......:

在此输入图像描述

sdk android intel android-virtual-device android-emulator

305
推荐指数
7
解决办法
20万
查看次数

什么是"android:allowBackup"?

自从新的ADT预览版本(版本21)以来,它们有一个新的lint警告,它告诉我清单文件(在应用程序标记中)的下一件事:

应该明确地将android:allowBackup设置为true或false(默认情况下为true,这可能会对应用程序的数据产生一些安全隐患)

官方网站上,他们写道:

一些新检查:您必须明确决定您的应用是否允许备份和标签检查.有一个新的命令行标志用于设置库路径.编辑时增量lint分析的许多改进.

这警告是什么?什么是备份功能,以及如何使用它?

另外,为什么警告告诉我它有安全隐患?禁用此功能有哪些缺点和优点?


清单有两种备份概念:

  • "机器人:allowBackup "允许备份和通过ADB恢复,如图所示在这里:

是否允许应用程序参与备份和还原基础结构.如果此属性设置为false,则不会执行应用程序的备份或还原,即使是全系统备份也会导致所有应用程序数据都通过adb保存.此属性的默认值为true.

这被认为是一个安全问题,因为人们可以通过ADB备份您的应用,然后将您应用的私人数据导入他们的PC.

但是,我认为这不是一个问题,因为大多数用户不知道什么是adb,如果他们这样做,他们也会知道如何根设备.ADB功能仅在设备启用了调试功能时才有效,这需要用户启用它.

因此,只有将其设备连接到PC并启用调试功能的用户才会受到影响.如果他们的PC上有使用ADB工具的恶意应用程序,这可能会有问题,因为应用程序可以读取私有存储数据.

我认为Google应该在开发人员类别中添加默认禁用的功能,以允许通过ADB备份和恢复应用.

  • "机器人:backupAgent "允许使用的备份和恢复云的功能,如在这里这里:

实现应用程序备份代理的类的名称,BackupAgent的子类.属性值应该是完全限定的类名(例如"com.example.project.MyBackupAgent").但是,作为简写,如果名称的第一个字符是句点(例如,".MyBackupAgent"),则它将附加到元素中指定的包名称.没有默认值.必须指定名称.

这不是安全问题.

android adt compiler-warnings android-lint android-backup-service

252
推荐指数
3
解决办法
13万
查看次数

自动适应TextView for Android

背景

很多时候,我们需要将TextView的字体自动调整到给定的边界.

问题

可悲的是,即使有很多线程和帖子(和建议的解决方案)谈论这个问题(例如这里,这里这里的例子),它们都没有真正运作良好.

这就是为什么,我决定测试每一个,直到找到真正的交易.

我认为来自这样一个textView的要求应该是:

  1. 应允许使用任何字体,字体,样式和字符集.

  2. 应该处理宽度和高度

  3. 没有截断,除非文本由于限制而无法适应,我们已经给它(例如:文本太长,可用大小太小).但是,如果我们愿意,我们可以请求水平/垂直滚动条,仅适用于那些情况.

  4. 应该允许多线或单线.如果是多行,请允许最大和最小行.

  5. 计算速度不应该慢.使用循环找到最佳尺寸?至少要优化它,不要每次增加1个采样.

  6. 在多行的情况下,应该允许更喜欢调整大小或使用更多行,和/或允许使用"\n"字符自己选择行.

我试过的

我已经尝试了很多样本​​(包括链接的那些,我已经写过了),而且我也尝试修改它们来处理这些情况,我已经谈过了,但没有一个真正起作用.

我做了一个示例项目,让我可以直观地看到TextView是否正确自动匹配.

目前,我的示例项目只是随机化文本(英文字母加上数字)和textView的大小,并让它保持单行,但即使这样也不适用于我尝试的任何样本.

这是代码(也可在此处获得):

文件 res/layout/activity_main.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" tools:context=".MainActivity">
  <Button android:id="@+id/button1" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" android:text="Button" />
  <FrameLayout android:layout_width="match_parent"
    android:layout_height="wrap_content" android:layout_above="@+id/button1"
    android:layout_alignParentLeft="true" android:background="#ffff0000"
    android:layout_alignParentRight="true" android:id="@+id/container"
    android:layout_alignParentTop="true" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

文件 src/.../MainActivity.java

public class MainActivity extends Activity
  {
  private final Random        _random            =new Random();
  private static final String ALLOWED_CHARACTERS ="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";

  @Override
  protected void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState); …
Run Code Online (Sandbox Code Playgroud)

android font-size textview layoutparams

229
推荐指数
5
解决办法
18万
查看次数

如何从Google Play获取用户下载的应用列表(付费/免费)?

我最近遇到了这个应用程序购买应用程序,它以某种方式能够检索我在使用我的谷歌帐户登录后在谷歌播放中支付的应用程序.

我正试图找出它是如何完成的,因为我想构建一个类似的应用程序,但对于下载的免费应用程序.

但是,即使经过整个API列表,我也无法找到用于检索该信息的OAuth API Scope .

谷歌登录要求访问androidmarket


编辑:我正在对这个问题提出新的赏金,正如我在这里提出的一个类似的问题所提出的那样,因为在这里和那里我没有看到关于如何做到的真正答案,以及可以做些什么用它.

我想将问题细化为多个部分:

  1. 什么是可用于获取已购买应用程序信息的API?我在哪里可以阅读它?请展示如何操作的完整实用示例.

  2. 可以做得更多吗?也许执行搜索?也许显示已安装的免费应用程序?也许是他们安装和卸载的时间?那些应用程序的类别?

  3. 使用此API有什么特殊要求吗?


编辑:我正在为此付出最大的赏金,因为无论我阅读和尝试了多少,我仍然无法制作可以从用户下载的Play商店查询应用程序的POC(名称,包装)名称,安装和/或删除日期,图标URL,价格...),包括付费和免费应用程序.

如果有人找到了工作样本,请展示它是如何完成的,并展示您是如何找到它的(文档或任何导致您获得解决方案的内容).我无法在任何地方找到它,而这里目前的解决方案对我来说太模糊了.

android google-play google-oauth google-signin

118
推荐指数
2
解决办法
3791
查看次数

如何使用为Android 5.0(Lollipop)提供的新SD卡访问API?

背景

Android 4.4(KitKat)上,谷歌已经限制了对SD卡的访问.

从Android Lollipop(5.0)开始,开发人员可以使用新的API,要求用户确认允许访问特定文件夹,如此Google-Groups帖子所述.

问题

该帖子指导您访问两个网站:

这看起来像是一个内部示例(可能稍后会在API演示中显示),但很难理解发生了什么.

这是新API的官方文档,但它没有详细说明如何使用它.

这是它告诉你的:

如果您确实需要完全访问整个文档子树,请首先启动ACTION_OPEN_DOCUMENT_TREE以允许用户选择目录.然后将生成的getData()传递给fromTreeUri(Context,Uri)以开始使用用户选择的树.

在导航DocumentFile实例树时,您始终可以使用getUri()来获取表示该对象的基础文档的Uri,以便与openInputStream(Uri)等一起使用.

要在运行KITKAT或更早版本的设备上简化代码,可以使用fromFile(File)来模拟DocumentsProvider的行为.

问题

我对新API有几个问题:

  1. 你是如何真正使用它的?
  2. 根据帖子,操作系统会记住应用程序被授予访问文件/文件夹的权限.你如何检查你是否可以访问文件/文件夹?是否有一个函数可以返回我可以访问的文件/文件夹列表?
  3. 你如何在Kitkat上处理这个问题?它是支持库的一部分吗?
  4. 操作系统上是否有设置屏幕,显示哪些应用可以访问哪些文件/文件夹?
  5. 如果在同一设备上为多个用户安装了应用程序,会发生什么?
  6. 是否有关于这个新API的任何其他文档/教程?
  7. 权限可以被撤销吗?如果是这样,是否有意图被发送到应用程序?
  8. 是否会在所选文件夹上递归请求权限工作?
  9. 使用该权限是否也允许用户有机会根据用户的选择进行多次选择?或者应用程序是否需要专门告知意图允许哪些文件/文件夹?
  10. 模拟器上有没有办法尝试新的API?我的意思是,它有SD卡分区,但它作为主要外部存储器,所以已经给出了所有访问权限(使用简单的权限).
  11. 当用户用另一张SD卡替换SD卡时会发生什么?

android android-sdcard android-5.0-lollipop documentfile

113
推荐指数
2
解决办法
7万
查看次数

单击按钮时如何在按钮上形成圆形纹波?

背景

在Android的拨号器应用程序上,当您开始搜索某些内容,然后单击EditText左侧的箭头按钮时,会对其产生圆形连锁效果:

在此输入图像描述

问题

我也尝试过它,但我有一个矩形的:

    <ImageButton
        android:id="@+id/navButton"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="8dp"
        android:background="?android:attr/selectableItemBackground"
        android:src="@drawable/search_ic_back_arrow"/>
Run Code Online (Sandbox Code Playgroud)

这个问题

单击时如何使按钮具有圆形波纹效果?我是否必须创建一个新的drawable,或者是否有内置的方式?

android button rippledrawable

107
推荐指数
8
解决办法
6万
查看次数

需要在开发者控制台上对beta/alpha测试做一些澄清

背景

Android开发者控制台有3个标签用于发布应用程序的apk文件:alpha,beta和production,如下所示:

在此输入图像描述

我记得在谷歌IO讲座之一,在进行100%规模发布之前检查你的应用程序有多好的一种很酷的方法是,只允许一部分用户先下载应用程序.我认为它被称为"分阶段发布",因为如果有太多问题要发布给所有人,你可以推出发布.

我的问题

  1. 它们之间究竟有什么区别,特别是在Alpha和Beta之间?

  2. 只有生产阶段可供游戏商店的人使用,对吗?

  3. 哪一个允许仅发布给特定的人/百分比,你以哪种方式发布?

  4. 哪个阶段允许应用内结算,至少用于测试?我不明白为什么我不能在上传应用程序之前测试它.

  5. 在百分比方法中,如果我使用相同的方式发布新的应用程序版本,它是否会首先更新为有幸安装以前版本的人?

android publishing beta-testing

106
推荐指数
4
解决办法
5万
查看次数

如何模仿谷歌地图的底层3阶段行为?

背景

我被指派制作一个与Google地图显示找到结果的底页的行为类似的用户界面.

它有三个不同的阶段:

  1. 底部内容.上部区域仍然是可触摸的,不会在底部滚动任何东西
  2. 全屏内容,而上部区域有一个大标题.
  3. 全屏内容,而上部区域只有工具栏.

以下是我在Google地图上讨论的内容:

在此输入图像描述

问题

事实是,底页不是设计库的一部分(尽管这是请求的,这里).

不仅如此,UI似乎相当复杂,需要在多个阶段处理工具栏.

我试过的

我已经找到了底部片(一个很好的(足够的)库在这里),并添加内容到它的碎片样本,有大致相同的看法材料设计的样品,如图(如这里),有一个CollapsingToolbarLayout会照顾阶段2 + 3.

在我正在制作的应用程序中,我还必须在滚动时移动一个图标,但我认为如果我成功完成其余部分,这应该很容易.这是代码:

fragment_my.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    android:id="@+id/main_content"
    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.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/detail_backdrop_height"

        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
        </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">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingTop="24dp">

            <android.support.v7.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/card_margin">

                <LinearLayout
                    style="@style/Widget.CardContent"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="Info"
                        android:textAppearance="@style/TextAppearance.AppCompat.Title"/> …
Run Code Online (Sandbox Code Playgroud)

android material-design android-design-library android-coordinatorlayout android-collapsingtoolbarlayout

106
推荐指数
2
解决办法
3万
查看次数