谷歌最近为设计师添加了很多指南(这里),包括大量关于事物如何运作的动画.
当我阅读指南时,我决定尝试新设计,并使用支持库.
可悲的是,对于他们中的许多(或者可能是全部?),我无法使用Google提供的官方API来了解如何实现它们.
例如,我试图找出他们如何实现这种名为"灵活空间与图像"的酷炫滚动效果(取自此处):链接.但是,无论我在哪里搜索,我唯一能找到的就是第三方库(比如这个).
另一个例子是创建Material-design凸起按钮样式的方法(在此处发布)
我在Android开发者博客上发现了非常具体元素的小片段(以及更多指南),例如此处和此处,但这还不足以使用它,更不用说支持Android前Lollipop版本了(那就是大多数设备现在).
我也找到了这个文档,但同样,它对设计师网站(这里)显示的内容缺乏很多解释.
是否有任何新的材料设计指南的API /样品/教程?
除了我发现的以外还有什么?
支持库是否有可能几乎不支持新设计?我甚至不能找到对话的支持和Prefereces在里面,所以我做了什么(基于别人的库)在这里 ......
有这么多动画的例子真的很奇怪,但是没有真正的代码可以尝试用于最佳实践......
android android-support-library material-design android-5.0-lollipop
这是一个简短的问题:
假设我有一个View与RippleDrawable作为背景.
是否有一种简单的方法可以触发特定位置的纹波而不会触发任何触摸或点击事件?
我有一些测试应用程序,我从来没有打算通过这个网站发布到官方Play商店(又名Android Market).我需要删除它们并使用新的,因为我也忘记了我放置测试应用程序的签名密钥的位置.
那么,如何从帐户中删除旧的测试应用程序?
我只是无法理解为什么他们有这种严格的行为.他们说,如果找不到密钥,该应用程序将成为一个孤儿.为什么他们不能在服务器中检查应用程序是否被删除并通知用户该应用程序不会获得任何更新,并通过同一发布者为他提供替代应用程序.
例如:"亲爱的App1用户,这个应用程序已被发布者从市场上移除,这是发布者可能取代App1的其他应用程序(或者"这是发布者打算取代App1的App2")".
说到测试应用程序,有没有办法对应用程序进行小型发布,以便只有特定帐户才能从市场上下载应用程序?
Google允许执行应用邀请,并跟踪他们改善应用安装的效果:
https://www.youtube.com/watch?v=UfdCNYXMC9M
我做了一个简单的应用程序邀请,似乎人们使用它,使用此代码:
public static Intent getAppInviteIntent(Context context) {
return new AppInviteInvitation.IntentBuilder(title,appName).setCustomImage(imageUri).setMessage(message).setCallToActionText(download).build();
}
startActivityForResult(getAppInviteIntent(this), GOOGLE_APP_INVITES_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
这可行,但在Google Analytics网页中,我找不到显示app-invite统计信息的方法,即使他们说这是自动的(此处).可悲的是,即使我发现的东西看起来很旧,他们使用已弃用的功能.
我想也许它不是很自动(因为教程在接收器部分也有一些额外的代码,这里),我们可能需要添加一些代码,因为这个文档说:
当用户接受邀请并安装应用程序时,getInvitation(GoogleApiClient,Activity,boolean)将更新邀请状态以安装并使用getInvitationIntent()从AppInviteInvitationResult访问的意图中返回邀请数据
看看谷歌的样本(这里),我注意到他们创建了2个活动.一个是主要活动,它调用"getInvitation",另一个称为"DeepLinkActivity",并处理深层链接(可能是额外的数据,如优惠券).
我还发现了一些关于跟踪的stackOverflow问题(比如这里),但我看到的是人们还没有成功跟踪.
如视频所示,跟踪邀请及其工作情况所需的最少代码是什么?应在Analytics页面中配置什么?我目前不使用深层链接,所以我不想使用它.
Google似乎将app-invites功能移至"firebase"gradle存储库.这是必须的吗?有什么好处?我们目前使用之前的("com.google.android.gms:play-services-appinvite:...").FireBase的信息中心似乎不包含与Google Analytics一样多的分析用户界面.更不用说app-invites了.
如果#1的答案是我需要使用"getInvitationIntent",它是否必须在应用程序的主要活动上?它是否必须在一个活动中(也许是broadcastReceiver?)?
似乎也可以邀请到IOS(如此处和此处所示,使用"setOtherPlatformsTargetApplication").它是否正确?它是如何工作的?当IOS用户点击链接时会发生什么?什么应该放入"clientId"的参数,我从哪里得到它?
G +有app-invites吗?如果是这样,它是否也有分析?
我们有一个非常复杂的布局,其中包含CollapsingToolbarLayout,以及底部的RecyclerView.
在某些情况下,我们通过在RecyclerView上调用setNestedScrollingEnabled(boolean)暂时禁用CollapsingToolbarLayout的展开/折叠.
这通常很好.
但是,在某些(有点罕见的)情况下,RecyclerView上的慢速滚动会被半阻止,这意味着它会在向下滚动时尝试向后滚动.就像它有2个滚动相互争斗(向上滚动并向下滚动):
触发此操作的代码如下:
RES /布局/ activity_scrolling.xml
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.user.myapplication.ScrollingActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
<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/AppTheme.PopupOverlay"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/nestedView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_anchor="@id/app_bar"
app:layout_anchorGravity="bottom|end">
<Button
android:id="@+id/disableNestedScrollingButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="disable"/>
<Button
android:id="@+id/enableNestedScrollingButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="enable"
/>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
ScrollingActivity.java
public class ScrollingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scrolling);
Toolbar toolbar …Run Code Online (Sandbox Code Playgroud) android android-recyclerview android-collapsingtoolbarlayout
应用程序允许用户回答为什么决定卸载它们可能很有用.
似乎Dolphin网络浏览器应用程序(以及" 我发明的一切 ")以某种方式设法绕过它,现在每次卸载应用程序时它都显示一个网页(在默认的Web浏览器上).
即使我使用ADB卸载,也会发生这种情况.
作为一个用户,我真的很讨厌它,但它仍然很有趣,因为据我所知,应用程序无法获得卸载自己的意图.
怎么会这样?他们是如何克服这个问题的?
这是一个黑客?
在Android上,有两种方法可以通过BroadcastReceivers监听系统事件:
由于某些项目包含许多活动,服务和"管理器"类,因此让一个BroadcastReceiver通知应用程序上的所有侦听器有关已发生的事情,而不是使用多个BroadcastReceiver可能很有用(和他们的代码处理).
此类BroadcastReceiver的一个示例是侦听连接更改的示例:
@Override
public void onCreate() {
super.onCreate();
...
registerReceiver(new ConnectivityChangedBroadcastReceiver(), new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION));
...
}
Run Code Online (Sandbox Code Playgroud)
目的是在应用程序"活着"时(通过服务和/或活动)收听事件.
使用清单会错过这个目的,因为它会在每次事件发生时唤醒应用程序,即使应用程序不需要它.
事实是,取消注册不会发生,也许它会导致操作系统以不同的方式对待应用程序.
在从Application扩展的类上调用"registerReceiver"是一个众所周知的做法吗?
使用时是否有任何副作用和需要了解的事项?
有没有替代方案?
我只是想确保它被认为是安全的.
这是一个简单的问题,看到G +(这里)有关于此的大量帖子,以及官方文档(这里)缺乏信息:
当设备进入"打盹"模式时,应用程序的服务会发生什么变化?
它对后台/前台服务(绑定/未绑定,已启动/未启动)有什么作用,有/无部分/完整唤醒锁?
例如,为了创建在设备屏幕关闭时播放音频流的服务,您会做什么?如果音频流不是来自本地文件,而是来自网络,该怎么办?
看到Google开发者声称:
已经运行前台服务的应用程序(带有相关通知)不受打盹的限制.
- 之后进行了大量的讨论,声称这并不完全正确,我认为知道特殊的后台操作应用程序应该做什么是相当令人困惑的.
android android-service android-doze-and-standby android-doze
有时,您希望将一些占位符仅显示在IDE上的布局文件中.
例如,您可以使用:
<ImageView tools:src="@tools:sample/avatars" ... />
Run Code Online (Sandbox Code Playgroud)
并在预览中得到这个:
这些文件不是构建应用程序时获得的APK的一部分,因此仅用于开发是安全的.
这是我从这里被告知的:
对于3.0中的示例数据,您现在可以拥有不属于已编译apk的占位符图像.您只需要项目中的sampledata目录,其子目录包含要用作占位符的所有图像.您可以从"工具"属性中引用这些图像.此外,还有预定义的库存图像,如@ sample/avatars或@ sample/background/scenic
我找不到如何在项目中添加更多这样的图像(这样它们只会在IDE中使用,而不是APK的一部分),如果有办法放置其他资源,除了图像.
实际上我找不到这个功能的文档.
我试图将图像放在"res/sampledata"上并尝试"res/sample",但在两种情况下我都无法达到它.
We record a video of the user's face, and usually the face is located at the upper half of the video.
Later we wish to view the video, but the aspect ratio of the PlayerView might be different than the one of the video, so there needs to be some scaling and cropping.
我发现缩放PlayerView它的唯一方法是将它显示在它所拥有的整个空间中,但保持纵横比(当然需要在需要时进行裁剪),是通过使用app:resize_mode="zoom".以下是中心裁剪的示例:http://s000.tinyupload.com/?file_id = 00574047057406286563.显示内容的视图具有相似的宽高比越多,所需的裁剪越少.
但这仅适用于中心,这意味着它需要0.5x0.5的视频点,并从那一点开始进行缩放.这导致许多丢失视频重要内容的情况.
例如,如果我们有一个以纵向拍摄的视频,并且我们有一个方形的PlayerView并想要显示顶部区域,那么这将是可见的部分:
当然,如果内容本身是正方形,并且视图也是正方形,则应该显示整个内容,而不进行裁剪.
我试过通过Internet,StackOverflow(这里)和Github搜索,但我找不到怎么做.我发现的唯一线索是关于AspectRatioFrameLayout和AspectRatioTextureView,但我没有找到如何将它们用于此任务,如果它甚至可能的话.
我被告知(这里)我应该使用普通TextureView,并直接提供它 …
android ×10
android-collapsingtoolbarlayout ×1
android-doze ×1
crop ×1
exoplayer ×1
firebase ×1
google-play ×1
publish ×1
scale ×1
uninstall ×1