Ладно, я новичок в Android
программировании, мне сложно работать с графической частью.Понять всю прелесть создания макета в файле XML
, но потерял способ доступа к различным элементам, особенно к элементу View для рисования на нем.
См. Пример моего макета main.xml
здесь;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Title" android:text="App title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:background="#A0A0FF"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/PaperLayout"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:focusable="true">
<View
android:id="@+id/Paper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/File"
android:layout_width="fill_parent"
android:layout_weight="1"
android:layout_height="34dp"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:clickable="true" android:textSize="10sp"
android:text="File" />
<Button
android:id="@+id/Edit"
android:layout_width="fill_parent"
android:layout_weight="1"
android:layout_height="34dp"
android:clickable="true"
android:textSize="10sp" android:text="Edit" />
</LinearLayout>
</LinearLayout>
Как видите, у меня есть пользовательское приложение title bar
, затем середина заполнения View
и, наконец, две button
внизу.Перехват button
s 'событий и реагирование на них, например, изменение текста в строке заголовка и изменение View
цвета фона, работает отлично, но как, черт возьми, я могу получить доступ и, что более важно, использовать вид, определенный в main.xml
ОБНОВЛЕНИЕ : Большое спасибо за ваше предложение, однако, кроме того, что мне нужен View
, а не ImageView
, а у вас отсутствует параметр в canvas.drawText()
и конечная скобка, он неработа.
Теперь это, скорее всего, потому что вы пропустили тот факт, что я новичок и предполагая, что я могу заполнить любые пробелы.
Теперь, прежде всего, я НЕ понимаю, почему в моем main.xml
файл макета. Я могу создать элемент View
или даже SurfaceView
, что мне и нужно, но в соответствии с вашим решением я даже не определяю вид как <View ....../>
В любом случае яотредактировал мой main.xml
в соответствии с вашим решением и немного уменьшил его для простоты;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Title" android:text="App title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:background="#A0A0FF"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/PaperLayout"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:focusable="true">
<com.example.MyApp.CustomView
android:id="@+id/Paper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<com.example.colorbook.CustomView/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/File"
android:layout_width="fill_parent"
android:layout_weight="1"
android:layout_height="34dp"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:clickable="true"
android:textSize="10sp"
android:text="File" />
</LinearLayout>
</LinearLayout>
В моем основном java-файле MyApp.java
.Я добавил это после onCreate()
;
public class CustomView extends ImageView {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText("Your Text", 1, 1, null);
}
}
Но я получаю ошибку в части CustomView ; "Неявный супер-конструктор ImageView()
не определен для конструктора по умолчанию. Необходимо определить явный конструктор"
Eclipse предлагает 3 быстрых исправления о добавлении конструктора, но ни один не помогает, хорошо, он удаляет ошибку, но даетошибка приложения во время работы.
Я надеюсь, что кто-то может разбить это для меня и предложить решение, и, возможно, объяснить, почему я не могу просто создать элемент View в моем файле макета main.xml
и рисовать на немв коде.
ОБНОВЛЕНИЕ : Хорошо, я все еще пытаюсь использовать ваше решение, которое все еще дает мне проблемы и различные ошибки.Но в первую очередь я все еще НЕ понимаю, почему мне нужно создать собственный класс для использования в моем layout
, когда мне нужно даже использовать редактор макетов wysiwyg, чтобы вставить элемент View и «просто» нарисовать его вмой главный, ну пока только кодовый файл.Итак, пожалуйста, кто-нибудь ответит мне на этот вопрос.
В любом случае, теперь у меня есть;
package com.example.myapp;
import com.example.myapp.CustomView;
//and here comes other import
public class MyApp extends Activity {
//rest of code including OnCreate()
И я создал новый класс, новый файл CustomView.Java, куда я непосредственно вставил ваш код, чтобы он выглядел таккак;
public class CustomView extends ImageView {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setARGB(255, 150, 205, 129);
paint.setTextSize(20);
canvas.drawText("Your Text", 1, 1, paint);
}
}
Хорошо, поэтому этот код класса хочет, чтобы я добавил import
s для ImageView
, Canvas
и Paint
, что я и сделал, и затем снова я возвращаюсь к ошибкеобщественный класс *CustomView*
часть; "Неявный супер-конструктор ImageView () не определен для конструктора по умолчанию. Необходимо определить явный конструктор".
Я благодарен вам за помощь, СПАСИБО!