1. 程式人生 > >Android中自定義View的研究 -- 在XML中引用自定義View

Android中自定義View的研究 -- 在XML中引用自定義View

如果在一直使用SetContentView(new HellwView(this)覺得總是少了一點東西,少了什麼了,失去了Android中使用XML定義元件的便攜性,這種感覺讓人很不爽,呵呵,在這節裡我們會看到一個自定義View報錯的解決方法,讓我們來看看在XML中定義View
  • XML中定義View的一個小錯誤

我們試著直接將錯誤的那個例子寫出來 將上一講的View例子拿出來,修改main佈局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?xml version=
"1.0" encoding="utf-8"?> android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <com.fxhy.stady.HelloView android:layout_width=
"fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
修改MainActivity

super.onCreate(savedInstanceState);

        setContentView(R.layout.main);// 使用自定義的View 執行: 我們發現,竟然報錯了,我們在LogCat裡檢視下: 11-24 10:58:38.993:ERROR/AndroidRuntime(323): Caused by:java.lang.NoSuchMethodException: HelloView(Context,AttributeSet)
竟然是沒有HelloView(Context,AttributeSet)這個構造器,結局方法呼之欲出了,呵呵。
  • 解決方法

只需要在HelloView中新增以下方法就解決了:
1 2 3 4 5 6 7 8 9 10 /** * 這個是我們要在XML中初始化用的 * */ public HelloView(Context context,AttributeSet attrs){ super(context, attrs); }
執行: 關於這個解決方法網上有類似的問題:為什麼非得加上這個方法,其實這個方法是作為系統解析XML中定義的屬性時作為回撥方法用的
  • 另一中在XML中引用自定義View的方法

我們也可以使用如下的方法在XML中新增View
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?xml version="1.0" encoding="utf-8"?> android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <view class="com.fxhy.stady.HelloView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
執行結果與上面一樣

相關推薦

Android studio 在資原始檔strings.xml新增空格、換行符

<string name="aiyisi_tip">\t\t愛義思(上海)科技發展有限公司,國家級高新技術企業,成立於2012年。\n\t\t愛義思來自Acesmart的音譯。\n\t\t愛義思的使命是:一流智慧產品 創造美好生活,讓生活不在難!\n\t\t愛義思奉行“敬天愛人

Android Studio 使用Gradle替換AndroidManifest.xml指定內容

     在android{}裡新增程式碼,然後clean即可    一、aarproductFlavors { "com.yxl.paopao" {} //修改為的值 } android.libraryVariants.all { var

Android開發自動生成的AndroidManifest.xml的allowBackup屬性的含義和危險性例項講解

一、前言 今天在開發的過程中遇到一個問題,就是關於AndroidManifest.xml中的allowBackup屬性,也算是自己之前對這個屬性的不瞭解,加上IDE的自動生成程式碼,沒太注意這個屬性,但是沒想到這個屬性會直接導致隱私資料的丟失。下面就來看一下這個屬性的影

如何通過Servlet獲取定義在web.xml的初始化引數

先理一理大致的流程,我們的目的是客戶端通過jsp頁面請求web.xml中的資料。 首先,我們得在web.xml中定義初始化資料吧,不然使用者就要請求空資料了。 那麼,說到web.xml,究竟是個什麼玩意呢?我也不是很清楚,也沒怎麼了解。 我只知道它是一個和

Android 從res/values/strings.xml讀取具體的字串的方法

正確的解法:String mess = getResources().getString(R.string.mess_1);另外一種:you can simplify that to this.getString(R.string.some_id) 關鍵點android

android動畫fillBefore以及fillAfter在xml設定無效的問題

fillBefore是指動畫結束時畫面停留在第一幀,fillAfter是指動畫結束是畫面停留在最後一幀。最關鍵的問題是,這2個引數不能在xml中設定,這是沒有用的。必須在java程式碼中設定。比如setFillAfter(true);  setFillBefore(fals

onCreate()findViewByid無法獲取activity_main.xmlR.id.view

myTextview,myButton是在fragment_main.xml中的,在沒引進fragment_main.xml之前,你是通過findViewById找不到的。。,所以要在onCreateView中引入。public static class Placehold

Android定義View研究 -- 在XML引用定義View

如果在一直使用SetContentView(new HellwView(this)覺得總是少了一點東西,少了什麼了,失去了Android中使用XML定義元件的便攜性,這種感覺讓人很不爽,呵呵,在這節裡我們會看到一個自定義View報錯的解決方法,讓我們來看看在XML中定義Vi

android 定義view,在xml引用內部類View

java.lang.ClassCastException: android.view.View cannot be cast to com.voice.VoiceFragment$AnimationView E/AndroidRuntime( 3543): at com.voice.VoiceFragme

Android定義view實現載入、載入失敗、無資料

一、概述 Android中經常在有的app中可以見到“載入中”並不是以彈出對話方塊的形式顯示的,而是佔用整個螢幕,如果載入失敗就會出現載入失敗頁面,點選載入失敗頁面中任意區域,都可以重新載入。今天就和大家一起學習如何通過自定義view的方式實現載入中、載入失敗

ImageView的Scaletype決定了圖片在View上顯示時的樣子,如進行何種比例的縮放,及顯示圖片的整體還是部分,等等。 設定的方式包括: 1. 在layout xml定義Android:s

ImageView的Scaletype決定了圖片在View上顯示時的樣子,如進行何種比例的縮放,及顯示圖片的整體還是部分,等等。 設定的方式包括: 1. 在layout xml中定義Android:scaleType="CENTER" 2. 或在程式碼中呼叫i

android定義控制元件View在Activity使用findByViewId得到結果為null,解決方法。。

androidの自定義控制元件View在Activity中使用findByViewId得到結果為null 1.  大家常常自定義view,,然後在xml 中新增該view 元件。。如果在Activity 中使用findByViewId 方法獲取該view 時候,返回物件總為

Android開發之在xml設定定義屬性

xml中設定自定義屬性 分三步: 1. 在專案中的values檔案中建立attrs檔案 <?xml version="1.0" encoding="utf-8"?> <resourc

Android定義控制元件並且使其可以在xml定義屬性

package org.xiaom.customView.view; import org.xiaom.customView.R; public class MyView extends LinearLayout { private View root = null; // 上面的img priva

解決定義控制元件View在MainActivityfindviewbyid為空的問題

同事在自定義轉盤的程式碼里加了一個介面回撥,一直崩潰,一直以為是介面的問題 ,後來才發現是view中建構函式的問題 public Lucky(Context context) { this(context,null); } public Lucky(

XML drawable引用定義顏色

== 先看一下一個xml drawable檔案,這是一個button的樣式。 <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/an

android定義view新增XML屬性

1.在value下新建檔案(檔名隨便),把需要的名稱和型別放進去 <?xml version="1.0" encoding="utf-8"?> <resources>

安卓定義View在bitmap玩轉大波浪進度

迫不及待拿出了效果圖: 可切換波瀾4種狀態: 覺得不錯順手給個star謝謝大兄弟們了 使用方法: 考入BitmapWave還是一個200行的小鬼: 兩個自定義屬性: <declare-styleable name="bi

Android Studio 佈局引用定義屬性不提示的問題

Eclipse裡面自定義屬性的名稱空間的宣告一般都是 xmlns:app="http://schemas.android.com/apk/res/com.xxx(包名) 而Android Stu

獲取attrs.xml宣告的定義屬性的值

關鍵程式碼: private void init(Context context,AttributeSet attrs) { TypedArray ta = context.obtainStyledAttributes(attrs, R.