Как сделать Refrence Java-файл в макете Android. XML для Кустом Viewgroup - PullRequest
0 голосов
/ 11 ноября 2011

В моем приложении я хочу создать один виджет поиска, который можно будет повторно использовать как файл .java, мне нужно отразить его в файле layout.xml, чтобы я мог его использовать. Непосредственно ..... Вот мой код, имеющий одно поле редактирования, две кнопки.

public class SearchWidget extends ViewGroup{

    Context mContext;
    LinearLayout layout;
    EditText edit;
    Button searchButton;
    Button clear;

    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

    public SearchWidget(Context context) {
        super(context);
        this.mContext=context;
        layout=new LinearLayout(context);
        edit=new EditText(context);
        searchButton=new Button(context);
        clear=new Button(context);
        params.setMargins(10, 10, 10, 10);
        layout.setOrientation(LinearLayout.HORIZONTAL);
        layout.setLayoutParams(params);
        edit.setMaxLines(1);
        edit.setWidth(100);
        layout.addView(searchButton);
        layout.addView(clear);
    }

}

Пожалуйста, подскажите, как дать ссылку на этот java-файл в мой layout.xml Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

Вы можете использовать его, используя имя пакета вместе с именем файла, например

<com.myapp.SearchWidget android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
</com.myapp.SearchWidget>

Когда вы используете xml для создания собственного представления, вам нужно использовать конструктор с 2 параметрами.

После проверки вашего кода возникает много ошибок, например, что вы окончательно не добавляете «макет» в поисковый виджет. Так что ничего не появится. Я не уверен, каков твой конечный результат. Но я думаю, это то, что вы пытаетесь сделать.

public class SearchWidget extends LinearLayout {
    public SearchWidget(Context context, AttributeSet attrs) {
        super(context, attrs);      
            EditText edit = new EditText(context);
        LinearLayout.LayoutParams elp = new LinearLayout.LayoutParams(0,
            LayoutParams.WRAP_CONTENT, 1.0f);
        edit.setLayoutParams(elp);

        Button searchButton = new Button(context);
        searchButton.setLayoutParams(new ViewGroup.LayoutParams(
            LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT));
        searchButton.setText("Search");

        Button clearButton = new Button(context);
        clearButton.setLayoutParams(new ViewGroup.LayoutParams(
            LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT));
        clearButton.setText("Clear");

        addView(edit);
        addView(searchButton);
        addView(clearButton);       
    }
}

Здесь я расширил LinearLayout

0 голосов
/ 11 ноября 2011
package yourpackage;
... ...
public class SearchWidget extends ViewGroup
{
    // Please use this constructor.
    public SearchWidget(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }
    ... ...
}


<yourpackage.SearchWidget 
    android:id="@+id/searchWidget"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
0 голосов
/ 11 ноября 2011

В тебе xml код.Добавьте полное имя пакета перед именем класса для ссылки, а затем добавьте имя класса, например

<com.my.test.SearchWidget
            android:id="@+id/large_photo_gallery"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...