2016-01-26 5 views
1

На данный момент я пытаюсь создать собственное представление. Теперь я нашел полезный учебник по адресу developer.android.net. Я следовал за интродукцией, но у меня есть некоторые проблемы с использованием представления.Android Программирование Создание собственного вида

Во-первых, моя папка Структур

enter image description here

cView.java

package company.firstactivity.customViews; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 

public class cView extends View{ 
    public cView(Context context, AttributeSet attrs){ 
     super(context,attrs); 
    } 
} 

cViewAttributes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="cView"> 
     <attr name="showText" format="boolean" /> 
    </declare-styleable> 
</resources> 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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="company.firstactivity.MainActivity"> 

</RelativeLayout> 

Моя проблема - пространство имен, использующее представление. Что такое пространство имен? Может кто-нибудь мне помочь?

Заранее благодарен!

+3

Что вы подразумеваете под пространством имен? Откуда это пришло? – PearsonArtPhoto

+1

Вы хотите знать, как включить ваш взгляд на уровне xml? – thetonrifles

+1

@PearsonArtPhoto Нажмите на ссылку, а затем точку: ** Определите пользовательские атрибуты **. -> _ Вместо принадлежности к пространству имен http://schemas.android.com/apk/res/android, они принадлежат http://schemas.android.com/apk/res/[your имя пакета] _. – MyNewName

ответ

4

Пространство имен в xml может быть любым, но оно всегда должно иметь значение http://schemas.android.com/apk/res-auto. Пожалуйста, обратитесь к my_custom_namespace в следующем примере, чтобы понять, как вы его используете:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:my_custom_namespace="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="company.firstactivity.MainActivity"> 

    <company.firstactivity.customViews.cView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     my_custom_namespace:showText="true"/> 
</RelativeLayout> 

Вы можете изменить my_custom_namespace к app или все, что вы хотели бы иметь.

С другой стороны, если вы хотите использовать пользовательские атрибуты в Java-коде пользовательского вида вы можете прочитать это значение таким образом:

public cView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initView(context, attrs); 
} 

public cView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    initView(context, attrs); 
} 

private void initView(Context context, AttributeSet attrs) { 
    if (attrs != null) { 
     TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.cView); 
     boolean shouldShowText = styledAttrs.getBoolean(R.styleable.cView_showText, false); 
     styledAttrs.recycle(); 
    } 
} 
+2

Дайте мне знать, если он работает, или если у вас есть другие вопросы относительно этого. Если нет, вы можете принять ответ, чтобы другие могли принять его как ссылку – Mike

+0

yeha, ваше решение сработало хорошо, я принял его. Спасибо! – MyNewName

1

Чтобы использовать пользовательский вид в формате XML, вы должны использовать полностью указанное имя. Это комбинация пакета с именем класса. Таким образом, ваш будет company.firstactivity.customViews.cView

1

вы можете перемещать содержимое cViewAttributes.xml подать attire.xml в разрешении/значения

затем в макете XML вы можете объявить Xmlns

xmlns:app="http://schemas.android.com/apk/res-auto" 

, а затем вы можете использовать

app:showText="false" 
+0

благодарит за ответ! – MyNewName

Смежные вопросы