我尝试通过在按钮背景和按钮图标上放置一个半透明的PNG文件来实现悬停效果(按下按钮时的效果).不幸的是,按钮背景文件是一个9-PATCH-PNG,它在这里引起了一些麻烦:它"吞下"其层顶部的所有东西,并且不允许覆盖九个补丁-png的可伸展区域(细线周围) .换句话说,9 PATCH PNG的顶部和左边缘的黑线不仅导致拉伸,还导致填充行为.
删除9-Patch-Information不是一个好的解决方案.
在这里你可以看到我的按钮.蓝色背景是9 PATCH PNG.按钮周围的细线是不需要的.

此图层列表分配给按钮属性"background":
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/home_btn_bg_blue_without_padding" />
<item>
<bitmap
android:src="@drawable/home_icon_test"
android:gravity="center" />
</item>
<item
android:drawable="@drawable/layer_black_50" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
在每个边框上将图层的偏移设置为"-1"无效.你有什么建议吗?
更新
我尝试了跟随,这将避免缩放,从这里建议.但也没有工作:
<!-- To avoid scaling, the following example uses a <bitmap> element with centered gravity: -->
<item>
<bitmap android:src="@drawable/image"
android:gravity="center" />
</item>
Run Code Online (Sandbox Code Playgroud)
我的版本(还有9-patch-png的可伸展区域未被发现):

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/home_btn_bg_blue_hover_without_padding" />
<item>
<bitmap
android:src="@drawable/home_icon_test"
android:gravity="center" />
</item>
<item>
<bitmap android:src="@drawable/layer_black_100"
android:height="100dp"
android:width="100dp"/></item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
更新2
这对我有用吗?在Android上触摸覆盖图像是否透明?
如何工作:
if(findViewById(ResIdWithUnkownType) instanceof Bitmap)
{
Bitmap bitmap = (Bitmap) findViewById(ResIdWithUnkownType);
} else if(findViewById(ResIdWithUnkownType) instanceof ImageView)
{
ImageView = (ImageView) findViewById(ResIdWithUnkownType);
}
Run Code Online (Sandbox Code Playgroud) 启动我的应用程序时,应将几个POI坐标添加到Android系统.几个小时后,我的应用程序关闭,用户走近其中一个POI,他将收到通知,例如通过状态消息.
是这对我的方案是正确的做法?Android中有更多可用的东西来实现这一目标吗?
public void addProximityAlert(double latitude,double longitude,float radius,long expiration,PendingIntent intent)
android location-aware location-based-service android-location android-alarms
听到Google的desugar项目令我感到非常兴奋,因为我必须提供支持minSdkVersion 17。
我继续尝试了一个简单的Java 8示例:
List<String> myList = Arrays.asList("element1","element2","element3");
myList.forEach(element -> System.out.println(element));
Run Code Online (Sandbox Code Playgroud)
但是,Android Studio说 Call requires API level 24 (current min is 17): java.lang.Iterable#forEach
Google 发布了有关支持哪些功能的表格。他们的文档中是否提及Iterable.forEach()任何minSdkVersion 是否受支持?
在这里他们写道:
要将样式定义应用为主题,必须将样式应用于Android清单中的活动或应用程序.执行此操作时,活动或应用程序中的每个视图都将应用它支持的每个属性.例如,如果将前面示例中的CodeFont样式应用于Activity,则所有支持文本样式属性的View元素都将应用它们.
因此,当我将TextColor设置为Red时,所有带文本的元素都会变为红色吗?CSS样式表中是否有强大的说明符?我只看到styles(style="@style/CodeFont")的概念是切实可行的.
当在eclipse中点击"调试"按钮时,我的应用程序由一个调试密钥表单android签名,它存储在文件"debug.keystore"中.
现在我正在实施Facebook SDK,这迫使我使用已签名的应用程序进行Single SignOn功能.这样我需要生成我的公司密钥库的哈希值并将其存储在我们的Facebook开发者帐户中.
我知道如何通过Eclipse中的向导(通过AndroidManifest.xml)签署应用程序.如何调试这样一个签名的应用程序?
我可以以某种方式更改调试密钥并将我们的公司密钥设置为调试密钥吗?或者我该怎么办?现在我只能通过在设备上签名并安装我的应用程序来获得FB工作.我已经尝试生成调试密钥的哈希没有运气...
就我而言,实现者应该能够“更新”一个对象。
//creating an instance (follows the active record pattern)
SameClass myObject = SameClass.find(123,params);
//myObject gets replaced by the output of the web api inside, but it feels like an update for the implementator
myObject.update("ask the web api to paint it black");
Run Code Online (Sandbox Code Playgroud)
但是,在类内部,我还没有弄清楚如何立即替换所有属性。这种方法行不通,但是也许还有其他机会可以解决它:
public void update(String newParams) {
//Can't replace "this" (that call returns an instance of "SameClass")
this = ConnectionFramework.getForObject(SameClass.class,"some url",newParams);
}
Run Code Online (Sandbox Code Playgroud)
实际上,“ ConnectionFramework”是适用于Android的Spring RestTemplate。未简化的版本是:
public void update(HashMap<String,String> params) {
SameClassResponse response = restTemplate.getForObject(ENDPOINT+"/{id}.json",SameClassResponse.class, params);
this = response.getSameClass(); …Run Code Online (Sandbox Code Playgroud) gradle 文档不会花时间解释他们正在处理的实体。这就是为什么我想问这样一个基本问题。
我需要详细了解术语“组”、“模块”和“工件”对于更改此代码的真正含义:
compile('com.thoughtworks.xstream:xstream:1.4.7') {
exclude group: 'xmlpull', module: 'xmlpull'
}
Run Code Online (Sandbox Code Playgroud)
大约一年前,我使用从Android dalvik 转换中为 xmlpullparser获取的排除语句来修复多个 dex 文件故障。
但是升级到Android Studio 3.0后又出现这个错误!现在它说:Multiple dex files define Lorg/xmlpull/mxp1/MXParser有时...XmlPullParserException.java所以,我想了解我给出的参数exclude必须如何形成。
阅读文档,人们可能会认为组是包名称,而工件是类:
//excluding a particular transitive dependency:
exclude module: 'cglib' //by artifact name
exclude group: 'org.jmock' //by group
exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
Run Code Online (Sandbox Code Playgroud)
compile ( 'com.thoughtworks.xstream: xstream: 1.4.7' ) {
exclude group : …Run Code Online (Sandbox Code Playgroud) proguard 中的否定符(感叹号)应该允许我保留 apache 库之外的其他内容:
-keep class !org.apache.**
Run Code Online (Sandbox Code Playgroud)
根据这些答案。这就是要走的路:
但是,它混淆了我的 APK 中的所有类。
这是我的 build.gradle 的一部分(我有 Android Studio 3.5.3)
compileSdkVersion 29
buildToolsVersion "29.0.2"
//...
buildTypes {
release {
minifyEnabled true
proguardFiles /*getDefaultProguardFile('proguard-android.txt'),*/ 'proguard-rules.pro'
// Enables resource shrinking, which is performed by the
// Android Gradle plugin.
shrinkResources false
}
}
dependencies {
//Utility libs
implementation 'org.apache.commons:commons-collections4:4.1'
implementation 'org.apache.commons:commons-lang3:3.4'
implementation group: 'commons-io', name: 'commons-io', version: '2.5'
}
Run Code Online (Sandbox Code Playgroud)
添加 …
android ×9
android-r8 ×1
android-xml ×1
apk ×1
debugging ×1
facebook ×1
foreach ×1
gradle ×1
imageview ×1
instance ×1
java ×1
java-8 ×1
layer ×1
nine-patch ×1
proguard ×1
samsung-knox ×1
signing ×1
themes ×1
version ×1
xstream ×1