Eclipse中的Android:以编程方式将Nine-Patch分配给View

时间:2013-05-24 19:45:33

标签: android eclipse nine-patch r.java-file

  

为了清晰起见,已修改并编辑了内容。

相关参考资料:

Android ADT version 22, R.java files not generated

Developing for Android in Eclipse: R.java not regenerating

Create a NinePatch/NinePatchDrawable in runtime

https://code.google.com/p/android-apktool/wiki/9PatchImages

问题:我如何以编程方式(即运行时而不是通过XML定义)获取我的九补丁到R.java的引用,以便我可以从EmployeeAdapter::getView()调用它?

  

答案:

     
      
  • 运行时 /以编程方式为所有查看对象设置九个补丁背景相同,执行   返回对象之前view.setBackgroundResource(R.drawable.blue_fill)内的Adapter::getView(...)
  •   
  • 运行时 /以编程方式为 EACH View对象设置九个补丁背景 ,在{{1}内执行setBackgroundResource(R.drawable.blue_fill) }}。
  •   
  • 请确保您的View::onDraw(...) 的实施不会覆盖您的9.png,例如View::onDraw(Canvas c)
  •   
  • 将文件(blue_fill.9.png)放在正确 c.drawColor(color)文件夹中(为安全起见!)
  •   
  • 我读过九个补丁文件需要全部小写。 (安全,做到!)
  •   
  • 在XML文件中定义九个补丁的语法(我不确定如何利用它并超出此范围)但我可以向您保证我没有需要它。实际上,我强烈怀疑在创建/res/drawable-*/之后我的工作区问题随之而来,然后使用XML语法将其链接到我的/res/drawable-mdpi/blue_fill.xml。这可能是错的!
  •   
  • 随意借用下面的工作代码
  •   
  • 因为/ res /,/ layout /的错误会导致各种问题,并且可能会出现一个软管工作空间,编辑时要小心   XML或其他非.java文件。 (1)总是检查LogCat,问题,   控制台输出,(2)查看Eclipse的错误日志,最后   (3)详尽地查看您的构建配置以查看问题是否仍然存在(仔细检查ADT v22中的新功能“项目>属性> Java   构建路径> 订购和导出“并确保您的源代码   不会影响现有的库更高的订单
  •   
     

回答我的问题:

     

由于完全独立于ADT 22的原因,我的工作区没有   更长的再生/res/drawable-mdpi/blue_fill.9.png。我怀疑我搞乱了   R.java个文件夹导致了我的问题。我删除了所有文件   除了来自/res/drawable-*/的{​​{1}}以试图带来我的   工作区回到处女状态。我也怀疑我进口了   错误的R库(您应导入的<{1}})

原始问题: 我可以将ic_launcher.png与我定义的/res/drawable-*/一起使用。但是,当我尝试以编程方式将同一import com.example.yourproject.R分配给bl_fill.9.png内的GridView对象时,我收到bl_fill.9.png的编译时错误。

我花了很多天试图解决这个问题。非常感谢任何帮助!

环境:

  • ADT :v22
  • Android SDK工具:rev22
  • Android SDK平台工具:rev17
  • Android SDK构建工具:rev17
  • 目标API :Android 4.1 Jelly Bean(API级别16)
  • 最高API :Android 4.2 Jelly Bean(API级别17)

尝试:

  • 错误/ res / drawable - * /文件夹?

我在一个文件夹中尝试了所有图片。我尝试了所有文件夹中的所有图片。这些图片似乎无论在哪里都可以使用,因为View从不打算不找到图片资源。

  • 坏九补丁?

要揭穿它可能是一个格式不佳的* .9.png,我已经尝试了其中几个(我下载了所有这些)并且每个都在我的XML定义的GridView上工作。

  • 成功代码:

/ res / layout / activity_main.xml :GridView在此处以XML格式定义,我成功分配了9个补丁EmployeeAdapter::getView(...)

bl_fill cannot be resolved or is not a field

/ res / drawable-xxhdpi / xxhdpi-9p.xml :据我所知,编译器需要此文件来转换“源”九补丁(包含1px控制像素边框)进入“编译”的九补丁(添加“块”元数据并剥离所有控制像素)。但更重要的是,我了解应该从此文件定义生成GridView

bl_fill
  • 不成功的代码(已更新,现已有效):

但是,<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="5" android:columnWidth="90dp" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" android:background="@drawable/bl_fill" /> 似乎正在为其他资源生成int R.java.drawable.bl_fill引用,但只是顽固地不会为<?xml version="1.0" encoding="utf-8"?> <nine-patch xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/bl_fill"/> 生成一个。

EmployeeAdapter.java

R.java

0 个答案:

没有答案