Динамическое создание TextView в приложениях для Android

Я экспериментирую с созданием приложений для Android с использованием карт, и я надеюсь создать textView, который будет отображаться, когда пользователь нажимает на маркер. Единственным критерием является то, что представление должно быть прокручиваемым (часть текста может быть довольно длинным) и легко удаляться пользователем - путем прокрутки или каким-либо другим способом.

Я пробовал следующее:

 @Override
 public boolean onMarkerClick(final Marker marker) {

  TextView tv = new TextView(this);
  tv.setText(marker.getTag().toString());
 }

Я не ожидал, что что-то настолько простое сработает, и этого не произошло. Дальнейшие исследования показывают, что мне может потребоваться разместить TextView в моем XML-файле макета, но я не хочу этого делать, поскольку моя конфигурация более или менее настроена.

FWIW, это мой файл макета:

<?xml version = "1.0" encoding = "utf-8"?>
<!--
<fragment xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:map = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/map"
android:name = "com.google.android.gms.maps.SupportMapFragment"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".Excursions" />
-->
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:map = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
android:weightSum = "1">
<TextView
    android:layout_width = "match_parent"
    android:layout_height = "0dp"
    android:layout_weight = ".05"
    android:background = "#000000"
    android:text = "Excursions"
    android:textColor = "#ffffff"
    android:gravity = "center"/>
<fragment xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:map = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:id = "@+id/map"
    android:name = "com.google.android.gms.maps.SupportMapFragment"
    android:layout_width = "match_parent"
    android:layout_height = "0dp"
    android:layout_weight = ".85"
    tools:context = ".Excursions" />

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "0dp"
    android:layout_weight = ".10"
    android:background = "#004D79"
    android:orientation = "horizontal">

    <EditText
        android:id = "@+id/addressText"
        android:layout_width = "fill_parent"
        android:layout_height = "wrap_content"
        android:layout_alignParentLeft = "true"
        android:layout_marginLeft = "10dp"
        android:layout_marginTop = "7dp"
        android:layout_weight = "1"
        android:background = "#FFFFFF"
        android:text = "Enter address">
    </EditText>

    <Button
        android:id = "@+id/findButton"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:padding = "5dp"
        android:text = "Find">
        </Button>
</LinearLayout>

Обновлено: Просто чтобы уточнить, что мне нужно. Когда вы щелкаете по маркеру, должен появиться TextView, который покрывает весь экран, отображая текстовые данные; поскольку я не знаю, сколько текста будет отображаться, должны быть вертикальные полосы прокрутки. Каким-то образом должен быть способ отклонить новое текстовое представление, чтобы внешний вид приложения был восстановлен до того, как он был до щелчка по маркеру.

0
0
51
2

Ответы 2

Вам нужно установить параметры макета

tv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                                 LinearLayout.LayoutParams.WRAP_CONTENT));

А также добавить новый вид в родительский макет

parentLayout.addView(tv);

Привет, я сделал это, и на экране отображаются данные, но не так, как ожидалось. Он показывает TextView, появляющийся в нижней части экрана, но который ползет вверх, когда щелкают по маркерам. То, что я действительно хотел, было похоже на DialogBox в Visual C++, который будет отображаться на всем экране, а затем, если его закрыть, представление вернется в нормальное состояние, как если бы диалоговое окно / текстовое представление никогда не существовало.

user3713442 17.12.2018 23:00

Ах, я не думаю, что это было включено в вопрос изначально. В этом случае я бы предложил пойти с ответом Октавиана.

bmcglynn 18.12.2018 20:20

На мой взгляд, вы должны добавить этот TextView в xml с атрибутом

android:visibility = "gone"

И измените этот метод:

@Override public boolean onMarkerClick(final Marker marker) { 
    TextView tv = findViewById(R.id.text);
    tv.setText(text);
    tv.setVisibility(View.VISIBLE); 
}

Должен ли TextView находиться внутри тега LinearLayout (то есть самого внешнего по вертикали)?

user3713442 17.12.2018 22:44

Это не имеет значения

Oktawian 18.12.2018 17:57

Хорошо, я попробую (в настоящее время работаю над другим неприятным аспектом разработки карты)

user3713442 18.12.2018 18:16

Другие вопросы по теме