2014-07-17 53 views
-1

最近我花了一个多小时弄清楚我的xml有什么问题......直到我意识到在android xml中有两个不同的小部件:“view”和“View”。两者都是正确的,并不相同,因为大写的视图给我错误的classcastexception,直到我把它改为小写...我们什么时候使用这些?在android xml中小写和大写“视图”有什么区别?

编辑: 所以,为了创建Android的XML现有部件的修改版本,我不得不使用小写的 “视图”:

<view 
    android:id="@+id/mybutton1" 
    android:scaleType="fitXY" 
    android:adjustViewBounds="true" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="75" 
    class="com.example.customui2.MainActivity$ArticleFragment$MyButton" 
    android:contentDescription="@string/logo_desc" 
    android:src="@drawable/menu_button" /> 

附加到Widget类:

public static class MyButton extends ImageView 
     { 

      public MyButton(Context context, AttributeSet attrs) { 
       super(context, attrs); 

      } 

     }; 

当使用大写视图时,我在这样的行中有例外:

MyButton button1 = (MyButton) rootView.findViewById(R.id.mybutton1); 

,但我也发现实例时大写的观点是在“间隔部件”使用,如:

<View 
    android:layout_weight="20" 
    android:layout_width="match_parent" 
    android:layout_height="0dp"/> 
+0

很难回答,如果你没有发布你的xml –

+0

当使用''时,你有'ClassCastException'?这有点奇怪,你应该使用大写字母。 –

+0

抱歉不要在第一时间发布代码。我认为这是一个相当明显的问题,不值得张贴代码,但现在它在那里! – Savail

回答

2

View可能是指一类,而view是你的这个类的一个对象的情况下所选择的名称。

+0

对不起,但我仍不明白为什么它会抛出我classcastexception,如果我在我的例子中使用大写而不是小写 – Savail

3

View指的是android.view.View,它是所有视图的超类。它本身不会画任何东西,但通常用作间隔物。

view指的是任何View,具体类别在class属性中给出class="com.example.customui2.MainActivity$ArticleFragment$MyButton"在您的情况。你还可以这样写它作为

<com.example.customui2.MainActivity.ArticleFragment.MyButton ... 

(虽然与链接麦克·M.张贴在我不是100%的意见一定真的作品与内部类这样的,我没有一个开发环境在这里试试吧)

+0

出于好奇,你见过''使用?这是我听到的第一个(或者是很久以前,我已经忘记了它)。回想起来,尽管如此,我并不感到惊讶。 – CommonsWare

+1

@CommonsWare这很少见,但我记得在为客户提供咨询的同时,在实际的代码库中看到了 laalto

+1

@CommonsWare它显示在这里的自定义组件示例中:http://developer.android.com/guide/topics/ui/custom-components.html#modifying –

相关问题