0
我想在我的應用程序中實現自定義視圖。我去了這個頁面: http://developer.android.com/training/custom-views/index.html在android中實現自定義視圖時出錯:
和我創建了以下內容:
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/leftMenu"
android:layout_width="100dp"
android:layout_height="fill_parent"
android:background="@drawable/left_menu_background"
android:orientation="vertical"
android:visibility="gone" >
<ImageButton
android:layout_width="fill_parent"
android:layout_height="52dp"
android:background="@drawable/left_menu_close_button"
android:onClick="showLeftMenu" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/left_menu_separator" />
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/left_menu_buttons_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/left_menu_data_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/left_menu_button_transparent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:onClick="showSelectTab">
<ImageButton
android:id="@+id/left_menu_data_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/transparent_rectangle"
android:scaleType="fitXY"
android:src="@drawable/folder"
android:onClick="showSelectTab"/>
<TextView
android:id="@+id/left_menu_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Data"
android:textColor="@color/my_white"
android:onClick="showSelectTab"/>
</LinearLayout>
<ImageButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/left_menu_separator" />
<LinearLayout
android:id="@+id/left_menu_settings"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:onClick="showSettingsPopup">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/transparent_rectangle"
android:scaleType="fitXY"
android:src="@drawable/settings"
android:onClick="showSettingsPopup"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Settings"
android:textColor="@color/my_white"
android:onClick="showSettingsPopup">
</TextView>
</LinearLayout>
<ImageButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/left_menu_separator" />
</LinearLayout>
</ScrollView>
以及這些類別:
AppViewLinearLayout:
package com.emildesign.sgreportmanager.ui;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
public class AppViewLinearLayout extends LinearLayout {
public AppViewLinearLayout(Context context, AttributeSet attrs, int layoutResource)
{
super(context, attrs);
if (isInEditMode())
return;
View view = LayoutInflater.from(context).inflate(layoutResource, null);
addView(view);
}
}
和:LeftSideMenu:
package com.emildesign.sgreportmanager.ui;
import com.emildesign.sgreportmanager.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
public class LeftSideMenu extends AppViewLinearLayout
{
private LeftSideMenuClickListener mListener;
public LeftSideMenu(Context context, AttributeSet attrs, int layoutResource)
{
super(context, attrs, layoutResource);
findViewById(R.id.left_menu_data).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null)
mListener.dataOnClick(v);
}
});
findViewById(R.id.left_menu_settings).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null)
mListener.settingsOnClick(v);
}
});
}
public interface LeftSideMenuClickListener {
void dataOnClick(View v);
void settingsOnClick(View v);
}
}
現在我試着像這樣添加到我的主要佈局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoginScrActivity" >
<com.emildesign.sgreportmanager.ui.LeftSideMenu
android:id="@+id/leftSideMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
....
出於某種原因,我收到這在logcat中:
E/AndroidRuntime(1034): java.lang.RuntimeException: Unable to start activity Co
mponentInfo{com.emildesign.sgreportmanager/com.emildesign.sgreportmanager.activi
ties.ReportsTableActivity}: android.view.InflateException: Binary XML file line
#10: Error inflating class com.emildesign.sgreportmanager.ui.LeftSideMenu
UPDATE:
我做了如下改變,LeftSideMenu
:
public LeftSideMenu(Context context, AttributeSet attrs)
{
super(context, attrs, R.layout.left_menu);
.....
錯誤不見了,但我仍然可以看到我的自定義佈局。
Hirarchy查看器:
我在做什麼錯? 任何幫助,將不勝感激。 謝謝。
謝謝,我已經做到了。請參閱更新問題。但由於某種原因,我仍然無法看到我的自定義視圖。 – 2013-04-25 11:34:17
嘗試運行hierarchyviewer,你看到了什麼? – pskink 2013-04-25 11:40:46
在hierarchyviewer中我看到了我的視圖。看到更新的問題。 – 2013-04-25 11:50:07