Цвет границы TextView не установлен в желтый после вызова - PullRequest
0 голосов
/ 09 февраля 2019

Я изучаю Android и создал TableLayout с двумя строками в Activity под названием PlayActivity.В каждой строке я помещаю TextViews, которые я хочу иметь границы в цветах с суффиксом Edge, заданным в colors.xml.Все работает отлично, за исключением того, что цвет YELLOW (текст) не приводит к желтому цвету рамки в tv.setBackgroundResource(R.drawable.yellow_edge).

Я делаю игру, в которой пользователь попадает в PlayActivity и вытягивает несколько плиток из «мешка».Эти плитки имеют число в цветах в заглавных буквах (например, YELLOW) и границу другого цвета, определенного в файле colors.xml.Я проверил, является ли мой цвет yellow_edge непрозрачным, и это так.Я не понимаю, почему другие цвета работают, а этот - нет.Может кто-нибудь, пожалуйста, помогите найти мою ошибку?Вывод, который я получаю, таков: вывод

Мой класс плиток:

import android.graphics.Color.rgb
val BLUE: Int = rgb(0, 0, 255)
val RED: Int = rgb(255, 0, 0)
val YELLOW: Int = rgb(255,235,0)
val BLACK: Int = rgb(0, 0, 0)


class Tile(val col: Int = 0, val num: Int = 0){
    val name = "$col $num"
}

Как я создаю свои плитки:

class PlayActivity : AppCompatActivity() {
    val COLOURS = listOf(BLUE, RED, YELLOW, BLACK)
    val NUMBERS = IntRange(1, 13)
    lateinit var nameTv: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_play)
        val pack = makeTiles()
        nameTv = findViewById(R.id.nameTextView)
        val player = Player("Jack", plankGrid, this)
        nameTv.text = player.name
        player.drawTiles(14, pack)

    }
    private fun makeTiles(): MutableList<Tile>{
        val a = mutableListOf<Tile>()
        var count = 0
        for (value in COLOURS) {
            for (number in NUMBERS) {
                count += 1
                val tile = Tile(value, number)
                a.add(tile)
            }
        }
        a.shuffle()
        return a
    }
}

activity_play.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        tools:context=".PlayActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:text="@string/app_name"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp" android:id="@+id/textView"/>

    <TableLayout
            android:layout_width="440dp"
            android:layout_height="100dp"
            app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"
            app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp"
            android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintVertical_bias="1.0" android:orientation="horizontal" android:gravity="top|start"
            android:id="@+id/plankGrid">

        <TableRow android:id="@+id/row1" android:layout_width="match_parent" android:layout_height="match_parent"
                  android:orientation="horizontal"/>
        <TableRow android:id="@+id/row2" android:layout_width="match_parent" android:layout_height="match_parent"
                  android:orientation="horizontal"/>
    </TableLayout>


</android.support.constraint.ConstraintLayout>

Мой класс, где я заполняю TableLayout с TextViews:

import android.app.Activity
import android.view.Gravity
import android.view.View
import android.widget.TableLayout
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_play.*
import kotlinx.android.synthetic.main.activity_play.view.*


class Player(val name: String = "Jack",
             private var table: TableLayout,
             private val ct: Activity,
             private var count: Int = 0) {

    fun drawTiles(n: Int, pack: MutableList<Tile>) {
        for (i in IntRange(0, n-1)) {
            addTileToTable(pack[i])
            count += 1
        }
    }

    fun addTileToTable(tile: Tile) {
        val tv = TextView(ct)
        tv.setTextColor(tile.col)
        tv.textSize = 24.toFloat()
        tv.text =  tile.num.toString()
        tv.textAlignment = View.TEXT_ALIGNMENT_GRAVITY
        tv.gravity = Gravity.CENTER
        tv.width = table.layoutParams.width / 15
        tv.height = table.layoutParams.height / 2
        when (tile.col) {  // check colours and then set the border around the textview to that colour
            BLUE -> tv.setBackgroundResource(R.drawable.blue_edge)
            RED -> tv.setBackgroundResource(R.drawable.red_edge)
            YELLOW -> tv.setBackgroundResource(R.drawable.yellow_edge) // this is where it apparently goes wrong
            BLACK -> tv.setBackgroundResource(R.drawable.black_edge)
        }
        if (count <= 15) {
            table.row1.addView(tv)
        }
        if (count in 16..30) {
            table.row2.addView(tv)
        }
    }
}

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
    <color name="bluebck">#2882D1</color>
    <color name="blueEdge">#004780</color>
    <color name="white">#ffffff</color>
    <color name="redEdge">#E70000</color>
    <color name="yellowEdge">#FFEB3B</color>
    <color name="blackEdge">#000000</color>
</resources>

yellow_edge.xml и для сравнения также blue_edge.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white"/>
            <corners android:radius="1dp"/>
            <stroke android:width="1dip" android:color="@color/yellowEdge"/>
            <padding android:left="1dp" android:right="1dp"/>
        </shape>
    </item>
</selector>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white"/>
            <corners android:radius="1dp"/>
            <stroke android:width="1dip" android:color="@color/blueEdge"/>
            <padding android:left="1dp" android:right="1dp"/>
        </shape>
    </item>
</selector>

1 Ответ

0 голосов
/ 10 февраля 2019

Хорошо, поэтому после создания нового проекта с использованием предоставленного вами кода я обнаружил следующее:

Вы определяете свои цвета как константы, которые вам необходимо импортировать в классы Activity и Player.

Теперь я предполагаю, что в одном из этих классов вы импортируете YELLOW неправильно.Вы сами определили этот цвет, но import android.graphics.Color.YELLOW также существует.Я полагаю, что вы по ошибке импортировали это вместо просто import YELLOW.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...