我们在Google Play上发布了一个现有应用(apk v282).此应用没有应用内商品且没有BILLING权限.
我们开发了一个升级版本(v292),其中包含应用内商品和BILLING权限.
我们在Google Play控制台中创建应用内商品时遇到问题:当我们在Google Play控制台中上传v292 apk作为草稿时,我们在草稿中列出了两个APK:旧版和新版:

从这个页面,我们有两个选择:
1-我们点击左侧列表中的"应用内商品"来创建我们的产品,我们看到一个页面说:
要添加应用内商品,您需要向APK添加BILLING权限.
因此我们无法创建应用内商品,可能是因为v282仍处于草稿配置中.
2-或者,我们删除旧的v282 APK(没有BILLING权限),以便在草稿配置中只保留新的v292.但是当点击"应用程序内产品"时,我们会收到有关未保存配置的弹出警告.但是没有按钮来保存它,只发布.当然,我们不希望发布它,因为它正在测试中.
总而言之:如何在以前没有它的应用程序中测试应用程序内购买?
我想在ListPreference对话框中添加一些消息,所以我想到使用android:dialogMessage属性.
但是,当我设置此属性时,对话框中不再显示列表条目(使用android:entries和android:entryValues设置)(这似乎是一个已知的错误,因为我可以在其他地方阅读它).
所以我似乎需要制作一个特殊的自定义ListPreference才能显示dialogMessage和列表条目.
我考虑创建一个自定义类MyListPreference,为此目的稍作修改.我会覆盖onCreateDialogView()来进行更改.但是我对最干净的变化有点不确定,因为我可以看到两种选择:
备选方案1-创建自定义XML布局 我将复制ListPreference对话框的默认xml布局并添加textView.在onCreateDialogView()中,我会膨胀这个自定义布局.
备选方案2-动态修改视图 在onCreateDialogView()中,我将调用super.onCreateDialogView()并动态地将textView添加到它返回的视图中.
问题:你建议做什么?如果替代1是最好的,我在哪里可以找到ListPreference对话框的默认XML布局,以便我可以自定义它?
谢谢您的帮助
我使用微调器显示下拉列表。我希望列表中的项目具有圆角。因此,我使用9色块包含一个带有圆角的图像(在角的外部透明)作为视图项背景,并使用选择器在按下时显示不同颜色的9色块。
问题:当我按下微调器列表中的项目时,我可以在角落看到蓝色背景,其中9色块是透明的。
我似乎无法摆脱按下项目时出现的蓝色背景。如果删除微调器中的9个补丁和任何设置,则可以看到列表中的项目视图默认为灰色,按下时为蓝色。
我还尝试不使用9个色块作为背景,而只是使用颜色选择器,并将选择器中按下的颜色设置为透明。然后,当我按下该项目时,它不是透明的而是蓝色的。我认为列表中的视图确实是透明的,但是当按下时背景中仍然存在蓝色...
我使用自定义SpinnerAdapter创建项目视图。这是简化的代码:
private class MySpinnerAdapter implements SpinnerAdapter {
@Override
public View getDropDownView(int i, View recycledView, ViewGroup viewGroup) {
View view = new View(context);
view.setBackground(context.getResources().getDrawable(R.drawable.testspinner));
view.setMinimumHeight(100);
return (View) view;
}
}
Run Code Online (Sandbox Code Playgroud)
用于背景的选择器。这里只有一种颜色,没有9色块。按下的颜色应该是透明的:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@android:color/transparent" />
<item
android:drawable="@android:color/holo_purple" />
</selector>
Run Code Online (Sandbox Code Playgroud)
我在微调器上设置了自定义适配器:
spinner.setAdapter(new MySpinnerAdapter());
Run Code Online (Sandbox Code Playgroud)
而微调器是从XML布局中获取的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="wrap_content">
<Spinner
android:id="@+id/myDropDown"
android:spinnerMode="dropdown"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dropDownWidth="match_parent"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我曾尝试在微调器上设置许多不同的属性,并尝试了一些样式属性,但是我无法摆脱这种蓝色背景...
在 Android 视图上,我们使用了一个动画OvershootInterpolator
我们希望在 Jetpack Compose 中复制相同的动画。我看到https://developer.android.com/jetpack/compose/animation中描述了几个 AnimationSpec ,但我不知道哪一个可以复制OvershootInterpolator
tween规范似乎没有任何超调,只是在开始值和最终值之间进行动画处理而没有超调
springspec 确实会超调,但是它没有durationMillis补间参数,所以我们无法控制它的播放速度
keyFrames通过执行以下操作,spec 似乎是一个可能的解决方案:
animationSpec = keyframes {
durationMillis = 500
0f at 100 with FastOutSlowInEasing
// Overshoot value to 50f
50f * 2 at 300 with LinearOutSlowInEasing
// Actual final value after overshoot animation
25f at 500
}
Run Code Online (Sandbox Code Playgroud)
keyFrames有没有比使用复制更好/更简单的方法OvershootInterpolator?
我需要实现基于位置的服务.我不需要精确的位置,因此不需要GPS.
最简单的方法是在应用开始时开始侦听位置更新,并将其保持为ON:
mLocationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 100, mPendingIntent);
Run Code Online (Sandbox Code Playgroud)
由于我不需要太多精确度,我将更新的最大频率设置为10秒和100米而不是默认值0,0.
当我们考虑位置时,我们认为电池耗尽,但我想这是一个快捷方式,只有GPS真正耗尽电池.我认为这种网络提供商的使用不会耗尽电池.有什么想法吗?
我的应用程序支持从ldpi到xhdpi的各种屏幕密度.它包含一些需要在所有密度上正确显示的drawable(图像).我想知道有多少可绘制的分辨率实际上是必要的,考虑到Android运行时在找不到适当密度的资源时正在扩展资源.
如果您只提供mdpi drawables,它们将在hdpi/xhdpi(模糊)上放大,并在ldpi屏幕上缩小.
但是,如果仅提供xhdi资源,则它们将在所有低密度屏幕上缩小.按比例缩小不会使它们模糊,它们看起来会很好.
那么为什么还要为xhdpi提供其他密度的drawable?
我ActionBarSherlock在我的应用程序编译时使用Android 4.0.3.在我的设备上运行测试时JellyBean 4.2.1,我可以看到ActionBar底部buttons栏中的溢出图标.
见Screenshot.
如何overflow删除底部按钮?

编辑:两个按钮都有效!
我是C++的新手(经过许多Java年).我正在尝试使用函数指针指向我的类的成员函数,如下所示:
class MyClass
{
public:
MyClass();
void foo();
void bar();
};
MyClass::MyClass(){}
void MyClass::bar(){}
void MyClass::foo()
{
void (MyClass::*myMethod)();
myMethod = &MyClass::bar;
//-----THIS IS THE LINE WITH PROBLEM-----------
myMethod();
}
Run Code Online (Sandbox Code Playgroud)
但是,编译器失败:
test.cpp: In member function ‘void MyClass::foo()’:
test.cpp:22:14: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘myMethod (...)’, e.g. ‘(... ->* myMethod) (...)’
myMethod();
^
Run Code Online (Sandbox Code Playgroud)
我一直在尝试各种各样的*,&字符混合,并搜索解决方案,但无法让它工作.
任何的想法?