

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff">
<LinearLayout
android:id="@+id/edit_tray"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<View
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/trash"/>
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
"edit_tray"表示可以切换的UI元素.当编辑模式关闭时,"edit_tray"(以及垃圾桶图标)"消失".当编辑模式打开时,"edit_tray"可见并覆盖在ScrollView内容上.
垃圾桶图标有两个元素:图标本身及其背后的线性渐变.NinePatch图像包含三个可伸展区域和一个静态区域以容纳这些元素.图形中间的垃圾桶图标是静态的,应直接显示在屏幕的水平中心和底部.渐变应该从屏幕的底部延伸到另一侧.
NinePatch图像水平地仅包含图像两侧的可伸展区域的一个像素.其效果应该是垃圾桶图标直接出现在中心(左侧1个像素=右侧1个像素).但是,正如您在上面的屏幕截图中看到的那样情况并非如此.注意:此截图来自我的测试手机,即T-Mobile G2.在仿真器中可以看到相同的效果.但是,在draw9patch预览和eclipse图形布局视图中,图像是完美分布的.
我已经尝试了几种不同的方法来尝试找出错误的位置,并尝试修复它或解决它.包括:使用ImageViews代替Views(效果相同),使用android:scaleType ="fitXY"(同一问题),在运行时检查屏幕的宽度和"edit_tray"的宽度是否相同(它们是),使用两个不同的图像作为渐变(如edit_tray背景)和图标(作为ImageView src)(创建另一个问题,其中两个图像没有相互重叠.通过在两者上设置绝对高度固定)等.
我使用一些简单的NinePatch图像进行了一些测试,每侧最多有六个可伸缩区域.我注意到至少有一个测试用例(手机,模拟器,draw9patch,eclipse中的Graphical Layout)显示了一些问题.
我决定尝试水平扩展图像,以便在垃圾桶图标的边缘显示更多的线性渐变.我将图像设为128x64(之前为64x64).我制作了更多可拉伸部分的边缘部分,以试图控制发生在图像上的任何不良数学(?).Draw9patch报告了坏的部分,所以我把它放回到两个像素,两边一个像素.有效!图标直接位于屏幕中央!我不知道为什么,但是如果不改变图像的实际可伸缩部分,只将图像的宽度改为128,它就可以了.
我尝试将图像重新调整为大约100px宽,以删除一些冗余像素,错误又回来了!它不仅会返回,而且图标被放置在与屏幕中心偏移的完全相同的位置.我无法弄清楚为什么会这样发生.
有人有主意吗?这是一个错误吗?
鉴于我上面描述的解决方法,我目前正在进行此工作,但如果有人有任何建议我正在听.
我有一个九个补丁图像背景的小部件.图像保存在/ sdcard/mydir/bgs中.
当我尝试使用setImageViewUri方法加载图像时,我遇到了以下错误:
Unable to open content: file:///storage/emulated/0/sdcard/mydir/bgs
Run Code Online (Sandbox Code Playgroud)
..
然后
...
open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)
这只出现在主屏幕上,只有Nexus 10和Nexus 7(最新的启动器4.4不存在此错误).我的应用程序上也有一些RemoteView,一切正常.
我还在清单中添加了READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE.
我怎么解决?
更新:我检查方法setImageViewUri,我发现它改变了我的文件的路径.
if (value != null) {
// Resolve any filesystem path before sending remotely
value = value.getCanonicalUri();
if (StrictMode.vmFileUriExposureEnabled()) {
value.checkFileUriExposed("RemoteViews.setUri()");
}
}
Run Code Online (Sandbox Code Playgroud)
此方法接收我的值(/ sdcard/mydir/bgs)并将其更改为(storage/emulated/0/sdcard/mydir/bgs).但是这个文件不是通过adb存在于系统中的.

考虑上面的图像. - 虚线划分了9-Patch png,我将从photoshop文件中切出.我需要它来创建一个弹出框. - 该盒子包含一个dropShadow,如本照片中的测量工具所示. - 粉色线条用于显示我将如何使用draw9Patch工具创建9-Patch.
我的问题是:如果我有一个带有9-Patch的View"Container"作为背景我需要确保它的子视图总是在白框内.我打算用这个填充.我打算将填充设置为与测量工具相等.因此,如果它在photoshop中为30px,我会layout_paddingLeft"=30dp"为容器设置.(设计是在MDPI,所以我假设这个转换是可以的).但是,不同密度的屏幕如何处理9路径.例如,测量面积是30px还是30dip?
Android NinePatch图像似乎是带有额外信息的标准.png文件.是否有任何格式的规范,因为我希望能够在其他平台上实现这一点?
当我的phonegap应用程序启动时,我会弹出一个假的闪屏:
super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl("file:///android_asset/www/index.html", 500);
Run Code Online (Sandbox Code Playgroud)
我目前有3个不同的splash.png文件:hdpi,mdpdi和ldpi.我的问题是即使在hdpi中,你也会得到480 x 800的设备和480 x 854的其他设备,并且android会拉伸我的启动图像来填充屏幕.
我宁愿让图像保持其纵横比.据我所知,9补丁解决方案不适用于PhoneGap.如果愿意,请告诉我如何!我准备好了.9.png了.所以我能想到的其他解决方案是防止android扩展我的图像.我该怎么办?
谢谢!
我使用Brian Griffey提供的优秀要点(在此处找到),在Android 3.0+上成功构建了一个9patch drawable .
基本上我从网络加载原始(无补丁)图形文件,文件名包含我需要使用的上限,以便相应地缩放图像.然后我使用这些值与上面找到的类,并应用该图像作为背景的各种元件(如TextView,ImageButton,Button,ViewGroup,等等).
这可以完美地工作,你可以在这里看到:

但是,在Android 2.3.x上运行相同的代码会产生结果:

我查看了Android中使用的源代码来解析9patch图像(此处和此处),但没有找到使其正常工作的方法.我已经尝试了几乎所有我可以抛出的东西都无济于事.
为了记录,9patch由每个轴上的三列组成,一个固定,一个可伸缩,一个固定.
这里希望别人之前解决过这个问题.
提前致谢.
编辑我只对在Android 2.3及更高版本上复制此行为感兴趣(我最初有2.x).
编辑#2这个要点准确描述了我正在尝试做的事情 +源图像:
编辑#3图像的大小为22px/58px(宽度/高度),插图为14/6/14/6(上/左/下/右).
从创建的NinePatches网中是否有任何中心位置或集合?
我认为它们是真正的花哨和有用的东西.即使您不是设计师,这也可以为您带来巨大的利益和外观.但我认为,如果因为它们可用于图标而在互联网上有一些这样的收藏品会很棒.但我没有发现任何有用的东西.所以我问你是否知道这样的地点或网页?
UIImage 方法 :
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight.
这里,可伸展区域被强制为高/宽的单个像素.
我无法设置可伸缩区域,所以我想知道:是否有UIImage类别可以做到这一点?
用谷歌搜索后,我找到了一个lib.
公告: http ://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/

这是一张源图片,我想要拉伸内部的灰色矩形.
提前致谢.
draw9patch似乎非常不方便.如果图像很大,则需要大约5分钟来绘制所有必需的纯黑线.很难相信来自Google的高度专业的开发人员已经创建了类似这个工具的东西.
还有更好的应用吗?或者我做错了什么?
我是Android开发的新手,也是Android主题/定制的新手,看起来是一个广泛的主题......
我正在尝试给我的Switch组件一个特殊的外观和感觉,但我无法实现我想要的东西,avan在互联网上查找了很多资源.
这真让我抓狂!!
在此先感谢您的帮助,Android大师!
我在一个现有的android应用程序(v1)上工作,它是minSdkVersion ="8".
因此,应用程序使用第三方库来获取操作栏(ActionBar Sherlock)和开关(SwitchCompatLibrary):
今天,我们正在制作v2版本,minSdkVersion ="14".
我们的客户还要求我们更改默认的开关外观.
这看起来真的像最新的材料设计开关,但用橙色代替"绿 - 蓝"颜色,就像这里一样.
由于我们现在是minSdk 14,我们可以删除2个库"ActionBarSherlock"和"SwitchCompatLibrary",但这不是一个选项.的确,我们没有时间......
实际上,我尝试在我的项目的gradle文件appcompat-v7中添加依赖项,以便尝试使用带有材质主题的本机开关组件(请参阅此处),但这会因为重复的属性定义而提到错误,并提到了2个库以上.所以我不能用它,我不确定这应该有用......
dependencies {
(...)
compile project(':actionbarsherlock')
compile project(':switchCompatLibrary')
compile files('libs/android-support-v4.jar')
// incompatible avec actionbarsherlock and SwitchCompatLibrary...
// compile "com.android.support:appcompat-v7:22.0.+"
(...)
}
Run Code Online (Sandbox Code Playgroud)
所以这是执行代码.
在我的layout.xml文件中,我使用SwitchCompatLibrary开关:
<de.ankri.views.Switch
android:id="@+id/switchButtonNotification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true" />
Run Code Online (Sandbox Code Playgroud)
在我的themes.xml文件中:
<style name="Theme.Orange" parent="@style/Theme.Sherlock">
...
<!-- Theme switch with SwitchCompatLibrary -->
<item name="switchStyle">@style/switch_light</item>
<item name="textAppearance">@style/TextAppearance</item>
</style>
Run Code Online (Sandbox Code Playgroud)
使用SwitchCompatLibrary本身定义的样式信息
styles.xml:
<resources …Run Code Online (Sandbox Code Playgroud)