2013-02-20 54 views
2

我想添加左右填充只是我的列表視圖分隔線,因爲每行應該在屏幕的最左邊有一個純色,如果我添加填充到整個列表這些顏色也將被填充。我知道我可以製作我自己的分頻器,但我無法找到默認分頻器的可繪圖。如何將填充添加到JUST默認的列表視圖分隔符?

我試圖做這樣的繪製:

<View xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:background="?android:attr/listDivider" /> 

然後使其分頻器:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/background_pattern" > 

<ListView 
    android:id="@+id/status_list" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:divider="@drawable/list_divider" 
    android:headerDividersEnabled="false" 
    android:footerDividersEnabled="false" > 
</ListView> 

但應用力這一關:

 
02-20 18:02:15.374: E/AndroidRuntime(13457): FATAL EXCEPTION: main 
02-20 18:02:15.374: E/AndroidRuntime(13457): android.view.InflateException: Binary XML file line #7: Error inflating class android.widget.ListView 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at com.bitnation.tubeappy.StatusFragment.onCreateView(StatusFragment.java:79) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.view.ViewPager.populate(ViewPager.java:1012) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.view.ViewPager.populate(ViewPager.java:881) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.View.measure(View.java:15518) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.View.measure(View.java:15518) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.View.measure(View.java:15518) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.View.measure(View.java:15518) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.Choreographer.doFrame(Choreographer.java:532) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.os.Handler.handleCallback(Handler.java:725) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.os.Looper.loop(Looper.java:137) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at java.lang.reflect.Method.invokeNative(Native Method) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at java.lang.reflect.Method.invoke(Method.java:511) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at dalvik.system.NativeStart.main(Native Method) 
02-20 18:02:15.374: E/AndroidRuntime(13457): Caused by: java.lang.reflect.InvocationTargetException 
02-20 18:02:15.374: E/AndroidRuntime(13457): at java.lang.reflect.Constructor.constructNative(Native Method) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
02-20 18:02:15.374: E/AndroidRuntime(13457): ... 46 more 
02-20 18:02:15.374: E/AndroidRuntime(13457): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/list_divider.xml from drawable resource ID #0x7f020007 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.content.res.Resources.loadDrawable(Resources.java:1953) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.widget.ListView.(ListView.java:155) 
02-20 18:02:15.374: E/AndroidRuntime(13457): at android.widget.ListView.(ListView.java:139) 
02-20 18:02:15.374: E/AndroidRuntime(13457): ... 49 more 
+0

發佈更多'Exception'日誌... – 2013-02-20 17:42:46

+0

我已經發布了它。 – naviman 2013-02-20 18:20:52

回答

2

這裏是問題android:divider需要一個@drawable@color(請參閱docs),但您要給它一個保存在@drawable文件夾下的@layout(這就是編譯的原因),但在運行時崩潰。

android.content.res.Resources$NotFoundException: File res/drawable/list_divider.xml from drawable resource ID #0x7f020007 

不幸的是,我不認爲有引用默認的Android繪製列表分隔同時覆蓋其填充/邊界的任何好辦法。如果你得到了drawable的源文件,你可以編輯9.png文件的可伸縮/內容區域來調整它的填充,但這很枯燥。

這是解決方法我發現(和工程只是罰款):設置android:divider="@null",和你的分頻器View添加到row_layout.xml的底部(即您使用綁定到你的ListView)。基本上你會僞裝分隔線,而且它會住在每一排內而不是在它們之間,但對用戶來說它看起來是一樣的。然後,您將能夠控制分隔符的填充與每行填充分開,這是您的目標。

+0

謝謝!這工作:) – naviman 2013-02-20 19:42:39