#android #text #ondraw
#Android #текст #ondraw
Вопрос:
У меня небольшая проблема, вот код, который у меня есть на данный момент:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GraphicView(this));
TextView mainLabel = (TextView)findViewById(R.id.title);
mainLabel.setText("Android Circle Path");
}
static class GraphicView extends View{
public GraphicView(Context context){
super(context);
}
@Override
public void onDraw(Canvas canvas){
}
}
}
И main.xml файл:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="30dip"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip">
<TextView
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="20dip"
android:textSize="24.5sp"
android:id="@ id/title">
</TextView>
</LinearLayout>
</LinearLayout>
Когда я пытаюсь установить текст в функции onDraw (), приложение вылетает, что я делаю не так?
Комментарии:
1. Трассировка стека из logcat помогла бы.
Ответ №1:
onDraw
Метод представления следует использовать только для отображения в этом представлении. Вы не должны вызывать методы обновления пользовательского интерфейса в другом представлении. Переместите код для настройки заголовка в onCreate
метод вашего действия, поскольку это нужно сделать только один раз. Затем просто нарисуйте свой круг в пользовательском представлении. Кроме того, поскольку ваш пользовательский вид не реализует ViewParent, его не следует использовать для хранения заголовка TextView. Реорганизуйте свой xml, чтобы переместить вид заголовка за пределы GraphicsView
Комментарии:
1. итак, я переместил TextView из GraphicsView в моем XML, а также переместил строку кода в мой метод onCreate, однако он по-прежнему выходит из строя. Есть другие идеи?
2. Где происходит сбой и с каким исключением? Пожалуйста, отредактируйте свой пост и добавьте logcat для исключения.
Ответ №2:
TextView
это локальная переменная, созданная в onCreate
методе этого Activity
. Таким образом, область действия TextView
ограничена только этим onCreate
методом. Вы не можете получить к нему доступ вне этого метода. Более того, то, что вы пытаетесь сделать, неверно, внутри GraphView
onDraw
метода вы должны рисовать только GraphView
компоненты, а не внешние представления или что-либо еще.