Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Поменять фон TimePicker в режиме spinner

Имеется вот такой TimePicker.

XML
1
2
3
4
5
6
7
8
9
10
<TimePicker
        android:id="@+id/timePickerEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numbersSelectorColor="@color/colorPrimary"
        android:numbersTextColor="@color/colorPrimary"
        android:timePickerMode="spinner"
        app:layout_constraintTop_toBottomOf="@+id/textView10"
        app:layout_constraintEnd_toEndOf="parent"
        tools:targetApi="lollipop" />
Как можно поменять фон у hour picker и minute picker не меняя общий фон? Я знаю что атрибут background поменяет фон, но он поменяет общий фон всего TimePicker
Ответ: Спасибо.
Сообщение от Pablito
Layout Inspector и смотрится структура лаяутов
До этого не додумался
Вопрос: Spinner элементы

Доброго времени суток)
Есть Spinner список , нужно из этого списка выбрать элемент(текст) ,чтобы потом нажать на кнопку и в другом активити происходили события по этому тексту spinner'a .
Как реализовать этот выбор текста для нового активити(на него переходить могу), чтобы производить действия по запросу этого текста.

пока что типо этого, в OnClick() переход на другой активити

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
spin = (Spinner) findViewById(R.id.spinner1);
        
        ArrayAdapter<String> namesAdapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.calc));
 
        namesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        spin.setAdapter(namesAdapter);
        spin.setSelection(2);
        spin.setOnItemSelectedListener(this);
        Button btnActList = (Button) findViewById(R.id.btnActList);
Ответ: Вот пример где текст из спинера отправляется в другое активити при нажатии на кнопку:

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener,
        View.OnClickListener{
 
        public static final String INTENT_KEY = "intentKey";
 
        String spinnerInfo = "";
        String[] strArray = {
                "один",
                "два",
                "три",
                "четыре",
                "пять"
        };
 
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
 
                Spinner spinner = (Spinner) findViewById(R.id.spinner);
                Button button = (Button) findViewById(R.id.button);
 
                ArrayAdapter<String> namesAdapter = new ArrayAdapter<>(this, R.layout.item, strArray);
                spinner.setAdapter(namesAdapter);
                spinner.setOnItemSelectedListener(this);
 
                button.setOnClickListener(this);
        }
 
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                TextView textView = (TextView) view.findViewById(R.id.textView1);
                spinnerInfo = textView.getText().toString();
        }
 
        @Override
        public void onNothingSelected(AdapterView<?> parent) {}
 
        @Override
        public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                intent.putExtra(INTENT_KEY, spinnerInfo);
                startActivity(intent);
        }
}
activity_main.xml

Код XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
 
    <Spinner
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button" />
</LinearLayout>
item.xml

Код XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:background="#666666"
    android:text="TextView"
    android:textColor="#ffffff"
    android:textSize="24sp"
    android:gravity="center">
</TextView>
Во втором активити этот текст подхватывается и вставляется в TextView:

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class SecondActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
 
        Intent intent = getIntent();
        String string = intent.getStringExtra(MainActivity.INTENT_KEY);
 
        TextView textView = (TextView) findViewById(R.id.textView2);
        textView.setText(string);
    }
}
Вопрос: Правое выравнивание текста в Spinner

Случилась у меня вот такая проблема, сколько я не бился, но и решить или понять почему так я не могу. Предупреждаю, что в Android я чайник.
Для красивого интерфейса, мне необходимо сделать правое выравнивание текста в элементе Spinner, в котором по умолчанию выравнивание по левому краю. У меня это получилось, но не так как бы хотелось бы. (см. рис. 1 и рис. 2), а именно как список закрыт выравнивание остаётся по левому краю, а по правому краю выравнивание происходит, только когда список открыт. Как сделать выравнивание по правому краю, когда список закрыт?


activity_main.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mikhail.mytranslate.MainActivity">
 
 
 
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
 
        <include
            android:id="@+id/toolbar"
            layout="@layout/tool_bar"/>
 
        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>
 
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
</android.support.constraint.ConstraintLayout>
tool_bar.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:actionBarSize"
    android:background="@color/toolBarBackground">
 
    <LinearLayout
        android:id="@+id/toolbar_lang"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal">
 
        <Spinner
            android:id="@+id/from_language"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/toolBarBackground"
            android:minWidth="120dp"/>
 
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:src="@drawable/ic_swap_horiz_36dp" />
 
        <Spinner
            android:id="@+id/to_language"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/toolBarBackground"
            android:minWidth="120dp"/>
    </LinearLayout>
 
</android.support.v7.widget.Toolbar>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  
      Spinner spinnerLeft = (Spinner) findViewById(R.id.from_language);
        Spinner spinnerRight = (Spinner) findViewById(R.id.to_language);
 
        ArrayAdapter<String> spinnerAdapterLeft = new ArrayAdapter<String>(
                this,
                R.layout.spinner_item_lang_left,
                R.id.language,
                getResources().getStringArray(R.array.languages)
        );
 
        ArrayAdapter<String> spinnerAdapterRight = new ArrayAdapter<String>(
                this,
                R.layout.spinner_item_lang_right,
                R.id.language,
                getResources().getStringArray(R.array.languages)
        );
 
        spinnerAdapterLeft.setDropDownViewResource(R.layout.spinner_item_lang_left);
        spinnerAdapterRight.setDropDownViewResource(R.layout.spinner_item_lang_right);
 
        spinnerLeft.setAdapter(spinnerAdapterLeft);
        spinnerRight.setAdapter(spinnerAdapterRight);
spinner_temp_lang_left.xml

XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/language"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/toolBarForeground"
    android:gravity="end"
    android:background="@color/toolBarBackground"
    />
если надо ещё какие нибудь ресурсы из проекта, то пишите.

И заранее благодарю за помощь.
Ответ:
Сообщение от YellowTriangle
Да, это я знаю, но не понимаю, помечу это влияло на выравнивание текста в самом элементе TextView из которого состоял Spinner. Извините, что возможно это очевидно, но я не понимаю.
У вас в spinner_temp_lang_left.xml прописано android:gravity="end"
Это бессмыслено в контексте того, что лайауте, где находиться спиннер он был прописан как android:layout_width="wrap_content". Т.е. он всегда занимал ровно то пространство, которое требовалось бы для например слова "czech". Один из вариантов вам предлагал уважаемый ExFau$t, с помощью аттрибута android:layout_gravity сместить спиннер в самом лайоуте. В моем же варианте спиннер растягивается на максимально возможную для него ширину, и уже в нем с помошью android:gravity="end" текст смещается вправо.
Надеюсь понятно объяснил, т.к. у меня с объяснениями всегда плохо.
Вопрос: Spinner в AlertDialog

Как Spinner в AlertDialog сделать?
AlertDialog вызываю через нажатие fab.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Заголовок");
builder.setView(R.layout.dialog_layout);
builder.setPositiveButton("ОК", myClickListener);
builder.setNegativeButton("Отмена", null);
builder.show();
 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, new String[] {"0","1","2"});
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
// Выпадающий список
Spinner spinnerQ = (Spinner) findViewById(R.id.spinnerQuality);
spinnerQ.setAdapter(adapter);
spinnerQ.setSelection(0); // Выделяем элемент по-умолчанию
ОШИБКА на строке spinnerQ.setAdapter(adapter);
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
at ru.bonny.savevideo.MainActivity$override.showAlertDialog(MainActivity.java:96)
Ответ: OlegJV, так своя разметка же для alertDialog.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:paddingBottom="0dp"
    android:paddingLeft="24dp"
    android:paddingTop="24dp"
    android:paddingRight="24dp">
 
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
 
            <android.support.design.widget.TextInputLayout
                android:id="@+id/linkLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1">
 
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal"
                    android:hint="Ссылка на страницу"
                    android:ems="10"
                    android:id="@+id/link"
                    android:layout_weight="1" />
 
            </android.support.design.widget.TextInputLayout>
 
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Вперёд"
                android:id="@+id/go_link"
                android:layout_gravity="center_horizontal" />
        </LinearLayout>
 
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/downloadLinearLayout">
 
            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/spinnerQuality" />
 
        </LinearLayout>
 
    </LinearLayout>
 
</RelativeLayout>
Добавлено через 24 минуты
Сделал.
Вопрос: Не растягивается Spinner в TableLayout

Доброго времени суток.
Понадобился выпадающий список на экране. Компоненты которого размещены в TableLayout в двух условных столбцах.
Делаю так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        <TableRow android:padding="4dp">
 
            <TextView
                android:id="@+id/lShedule1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="4dp"
                android:text="Расписание 1"
                android:textSize="17dp"/>
 
            <Spinner
                android:id="@+id/sSpinner"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="4dp"
                android:textSize="17dp"/>
 
        </TableRow>
В коде добавляю стандартный адаптер и заполняю строками из ресурсов. Проблема в том, что Spinner не растягивается по ширине ячейки и треугольник перекрывает текст.
Получаю такую картину:

При этом, заметил, что если размещать Spinner вне таблицы - он нормально масштабируется.
Ответ: Код инициализации:
Java
1
2
3
4
5
sSpinner = (Spinner)view.findViewById(R.id.sSpinner);
 
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.planets_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sSpinner.setAdapter(adapter);
Добавлено через 39 минут
Победил беду, указав свойство Spinner`а
XML
1
android:layout_weight="1"
Вопрос: Не обрабатывается позиция Spinner

Посоветуйте пожалуйста, что нужно изменить, заранее спасибо.
Создал Spinner( мужчина, женщина), учитывая выбранную позицию должна выполнятся отдельная функция.
Т.е., если пользователь выбирает из списка "Мужчина" и далее вводит параметры : рост, вес, то результат считается по одной формуле. Если пользователь из списка выбирает "Женщина", то результат считается по другой формуле. Но результат постоянно считает только по первой формуле.

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
String[] data = {"Мужской", "Женский"};
int a;
 
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data1);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
Spinner spinner1 = (Spinner) findViewById(R.id.spinneractive);
spinner1.setAdapter(adapter1);
// заголовок
spinner1.setPrompt("Title");
// выделяем элемент
spinner1.setSelection(0);
// устанавливаем обработчик нажатия
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position1, long id) {
// показываем позиция нажатого элемента
Toast.makeText(getBaseContext(), "Position = " + position1, Toast.LENGTH_SHORT).show();
a = position1;// переменная а  = позиции из списка, т.к. position1 определена только для spinner1
 
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
 
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
float num1 = 0;
float num2 = 0;
float num3 = 0;
float num4 = 0;
float num5 = 0;
float result = 0;
float result1 = 0;
 
// Проверяем поля на пустоту
if (TextUtils.isEmpty(growth.getText().toString())
|| TextUtils.isEmpty(wt.getText().toString())
|| TextUtils.isEmpty(waist.getText().toString())
|| TextUtils.isEmpty(neck.getText().toString())
|| TextUtils.isEmpty(hips.getText().toString())) {
Toast.makeText(getBaseContext(), "Поле ввода - пустое", Toast.LENGTH_SHORT).show();
return;
}
 
// читаем EditText и заполняем переменные числами
num1 = Float.parseFloat(growth.getText().toString());
num2 = Float.parseFloat(wt.getText().toString());
num3 = Float.parseFloat(waist.getText().toString());
num4 = Float.parseFloat(neck.getText().toString());
num5 = Float.parseFloat(hips.getText().toString());
 
switch (v.getId()) {
case R.id.btnscore:
switch (a) {
case 0:
result = (float) (495 / (1.0324 - 0.19077 * (log(num3 - num4)) + 0.15456 * (log(num1))) - 450);
break;
case 1:
result = (float) (495 / (1.29579 - 0.35004 * (log(num3 + num5 - num4)) + 0.22100 * (log(num1))) - 450);
break;
}
break;
}
float imt = num1 / 100;
result1 = (float) (num2 / (pow(imt, 2)));
 
tvResult.setText("Процент жира = " + result);
tvResult1.setText("ИМТ = " + result1);
 
}
}
Ответ: Просто у меня 2 spinner и соответственно для них 2 массива - data и data1. Когда в адаптер передавал ошибься в названии, а так как массив реально существовал, то ошибка не выдавалась.
Спасибо большое!
Вопрос: Spinner

кто знает как сделать так чтобы при выборе пункта из Spinner выполнялся отдельный кусок кода? в моем случае есть код для генерации случайных чисел(ключ) и нужно сделать так чтобы при выборе длины ключа из списка Spinner'а длина ключа менялась на выбраную.
Ответ: в программировании я профан так что не могу сориентироваться как это адаптировать к коду. так же хотел бы узнать как лучше создать наполнение для Spinner: через xml или програмно. вот мой убогий)) код
package com.example.roman.hz;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.util.Random;


public class MainActivity extends ActionBarActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;


}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

private static final String mCHAR = "ABCDEF1234567890";
private static final int STR_LENGTH = 128; // длина генерируемой строки
Random random = new Random();
public void onClick(View v)
{
TextView tvInfo=(EditText)findViewById(R.id.editText1);
tvInfo.setText(createRandomString());
}
public String createRandomString() {
StringBuilder randStr = new StringBuilder();
for (int i = 0; i < STR_LENGTH; i++) {
int number = getRandomNumber();
char ch = mCHAR.charAt(number);
randStr.append(ch);
}
return randStr.toString();
}

private int getRandomNumber() {
int randomInt = 0;
randomInt = random.nextInt(mCHAR.length());
if (randomInt - 1 == -1) {
return randomInt;
} else {
return randomInt - 1;
}
}


}
Вопрос: Как найти Spinner из другого Activity и изменить выбранный в нем элемент?

Android Studio. У меня есть три кнопки на одном экране и спиннер на другом. Я пытаюсь найти спиннер, но выдает ошибку. Если поиск из другого активити, то тут как-то по-другому искать нужно? И как потом поменять выбранное поле, в зависимости от нажатой кнопки?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        Spinner spinner = new (Spinner)findViewById(R.id.spinnerType);
        switch (v.getId())
        {
            case R.id.btn1: {
                //выбрать первый элемент из Spinner
                break;
            }
            case R.id.btn2: {
                //выбрать второй элемент из Spinner
                break;
            }
            case R.id.btn3: {
                //выбрать третий элемент из Spinner
                break;
            }
        }
        Intent intent = new Intent(ShowActivity.this, ListActivity.class);
        startActivity(intent);
Ответ:
Сообщение от ExFau$t
Никак.
Сообщение от ExFau$t
Номер кнопки надо передавать через intent.setExtra().
Так вы определитесь: никак или все-таки можно ?
Вопрос: Как автоматически изменять размер текста в spinner в зависимости от размера экрана?

Здравствуйте. В программе использую две темы светлую и темную:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<style name="BlackTheme"  parent="android:style/Theme.Holo">
    <item name="android:colorBackground">@color/Black</item>
    <item name= "android:spinnerStyle">@style/spinner_style_black</item>
    <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItem_Black</item>
    <item name="Direct_Theme_color">@color/ActionBar_Dark</item>
    <item name="Inverse_Theme_color">@color/White</item>
    <item name="Grid_Graph_Theme_color">@color/Grid_Color_for_Black</item>
</style>
 
 
 
<style name="WhiteTheme"  parent="android:style/Theme.Holo.Light" >
    <item name="android:colorBackground">@color/White</item>
    <item name= "android:spinnerStyle">@style/spinner_style_white</item>
    <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItem_White</item>
    <item name="Direct_Theme_color">@color/ActionBar_Light</item>
    <item name="Inverse_Theme_color">@color/Black</item>
    <item name="Grid_Graph_Theme_color">@color/Grid_Color_for_White</item>
</style>

В них определены стили спиннера:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<style name="spinner_style_black" parent="@android:style/Widget.Spinner">
    <item name="android:background">@drawable/gradient_spinner_black</item>
    <item name="android:layout_marginLeft">5dp</item>
    <item name="android:layout_marginRight">5dp</item>
    <item name="android:layout_marginBottom">5dp</item>
    <item name="android:paddingLeft">6dp</item>
    <item name="android:paddingTop">4dp</item>
    <item name="android:paddingBottom">4dp</item>
    <item name="android:popupBackground">#2A5FB1</item> 
</style>
 
<style name="spinner_style_white" parent="@android:style/Widget.Spinner">
    <item name="android:background">@drawable/gradient_spinner_white</item>
    <item name="android:layout_marginLeft">5dp</item>
    <item name="android:layout_marginRight">5dp</item>
    <item name="android:layout_marginBottom">5dp</item>
    <item name="android:paddingLeft">6dp</item>
    <item name="android:paddingTop">4dp</item>
    <item name="android:paddingBottom">4dp</item>
    <item name="android:popupBackground">#2A5FB1</item> 
</style>
 
<style name="SpinnerDropDownItem_Black" parent="@android:style/Widget.DropDownItem.Spinner">
    <item name="android:background">#ff2A5FB1</item>
    <item name="android:textColor">#ffffffff</item>
   <item name="android:checkMark">@drawable/edited_radio</item>
</style>
 
<style name="SpinnerDropDownItem_White" parent="@android:style/Widget.DropDownItem.Spinner">
    <item name="android:background">#ff2A5FB1</item>
    <item name="android:textColor">#ff000000</item>
    <item name="android:checkMark">@drawable/edited_radio</item>
</style>

Ну и сам спиннер, например, с загруженным из ресурсов контентом:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
 <Spinner
                p1:layout_width="0dp"
                p1:layout_weight="0.3"
                p1:layout_height="match_parent"
                p1:id="@+id/spinner2"
                p1:entries="@array/SDR_str_arr"
                p1:layout_marginLeft="3dp"
                p1:layout_marginTop="4dp"
                p1:layout_marginRight="210dp"
                p1:layout_marginBottom="6dp" />


Размер шрифта в спиннере использовался стандартный, по умолчанию. Сейчас адаптируя разметку под размеры -large и -extra-large понял, что необходимо менять размер шрифта spinner (да и не только) в зависимости от размера экрана текущего девайса. Ну например так для обычного размера - textSize у всех спиннеров должен быть равен 18dp, для -large = 30dp, для -extra-large = 50dp. Как это сделать автоматически в разметке/стиле или как то в одном месте в коде? Как то может быть через атрибуты. Подскажите пожалуйста, а то всю голову уже сломал! Я думаю с аналогичной проблемой разработчики сталкиваются часто и должно быть какое то красивое решение.
Ответ: В том что они рабочие, я не сомневаюсь! Я пытаюсь понять, почему конкретно в моем случае они не работают.
Вот сейчас у меня в папке values-large лежит файл themes.xml в нем прописано:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<style name="BlackTheme"  parent="android:style/Theme.Holo">
    <item name="android:spinnerItemStyle">@style/MySpinnerStyle</item>
    <item name="android:spinnerDropDownItemStyle">@style/MySpinnerPopupStyle</item>
 
    <item name="android:colorBackground">@color/Black</item>
    <item name="Direct_Theme_color">@color/ActionBar_Dark</item>
    <item name="Inverse_Theme_color">@color/White</item>
    <item name="Grid_Graph_Theme_color">@color/Grid_Color_for_Black</item>
</style>
 
 
 
<style name="WhiteTheme"  parent="android:style/Theme.Holo.Light" > 
    <item name="android:spinnerItemStyle">@style/MySpinnerStyle</item>
    <item name="android:spinnerDropDownItemStyle">@style/MySpinnerPopupStyle</item>
 
    <item name="Direct_Theme_color">@color/ActionBar_Light</item>
    <item name="Inverse_Theme_color">@color/Black</item>
    <item name="Grid_Graph_Theme_color">@color/Grid_Color_for_White</item>
    <item name="android:colorBackground">@color/White</item>
</style>

и файл styles.xml
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
   <style name="MySpinnerStyle" parent="Base.Widget.AppCompat.TextView.SpinnerItem">
        <item name="android:textSize">30sp</item>   
        <item name="popupTheme">@style/MySpinnerPopupStyle</item>
    </style>
 
 
    <style name="MySpinnerPopupStyle" parent="Base.Widget.AppCompat.DropDownItem.Spinner">
        <item name="android:textSize">35sp</item>
    </style>

В файле разметки:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
<android.support.v7.widget.AppCompatSpinner
                p1:layout_width="0dp"
                p1:layout_weight="0.3"
                p1:layout_height="match_parent"
                p1:id="@+id/spinner1"
                p1:entries="@array/weather"
                p1:layout_marginLeft="3dp"
                p1:layout_marginTop="3dp"
                p1:layout_marginRight="210dp"
                p1:layout_marginBottom="3dp" />

И видно что код работает, величина шрифта меняется, но только вот этот спиннер почему то стал некликабельным!... Как так?
Вопрос: Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite

Подскажите пожалуйста в каком виде создавать данные в БД и как правильно переработать файлы чтоб выводить список стран и городов черпая данные из SQLite, а не из .списка.
Может где то есть пример подобного решения?

Файл java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
public class TetFirstJabRegActivity extends Activity implements AdapterView.OnItemSelectedListener, View.OnClickListener {
 
 
    private TableRow tableRow0;
    private TextView candidatInfoTV;
    private TableRow tableRow1;
    private TextView countryTextView;
    Spinner spinnerCountry;
    private TableRow tableRow2;
    private TextView citytextView;
    Spinner spinnerCity;
    private TableRow tableRow3;
    private TextView phonetextView2;
    private TableRow tableRow4;
    private TextView carModelTextView;
    private TableRow tableRow5;
    private String pseudo_tag;
    private TextView jabberUserLabel;
    private TextView jabberPasswordLabel;
    private int posCountryId;
    private String serverField;
    private String dispField;
    private int city;
    private String user;
    private String pass;
    private String server;
    private String disp;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        android.util.Log.d(TetGlobalData.TAG_TET_A_TET, "=========== START  TetFirstJabRegActivity ===============");
 
        String action = getClass().getCanonicalName();
        int pos = action.lastIndexOf('.') + 1;
        String onlyClass = action.substring(pos);
        pseudo_tag = onlyClass;
        Log.e(pseudo_tag, "###  this.getTaskId() = " + this.getTaskId() + "");
 
        setContentView(R.layout.activity_tet_first_jab_reg);
 
        
        countryTextView = (TextView) findViewById(R.id.countryTextView);
        tableRow2 = (TableRow) findViewById(R.id.tableRow2);
        citytextView = (TextView) findViewById(R.id.citytextView);
        tableRow3 = (TableRow) findViewById(R.id.tableRow3);
        jabberUserLabel = (TextView) findViewById(R.id.jabberUserLabel);
        tableRow4 = (TableRow) findViewById(R.id.tableRow4);
        jabberPasswordLabel = (TextView) findViewById(R.id.jabberPasswordLabel);
        tableRow5 = (TableRow) findViewById(R.id.tableRow5);
        spinnerCountry = (Spinner) findViewById(R.id.spinnerCountry);
        spinnerCity = (Spinner) findViewById(R.id.spinnerCity);
        spinnerCountry.setOnItemSelectedListener(this);
        findViewById(R.id.jabberOkButton).setOnClickListener(this);
        findViewById(R.id.buttoniHaveNotLogin).setOnClickListener(this);
        findViewById(R.id.buttonExit).setOnClickListener(this);
    }
 
    @Override
    public void onItemSelected(AdapterView<?> parent, View arg1, int pos,
                               long arg3) {
        Log.e(pseudo_tag, "runing  onItemSelected");
        posCountryId = pos;
        parent.getItemAtPosition(pos);
        if (pos == 1) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_ru_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        } else if (pos == 2) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_ua_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        } else if (pos == 3) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_by_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        } else if (pos == 4) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_by_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        }
 
 
        spinnerCity.setOnItemSelectedListener(
 
                new AdapterView.OnItemSelectedListener() {
                    @Override
 
                    public void onItemSelected(AdapterView<?> parent, View itemSelected,
 
                                               int selectedltemPosition, long selectedId) {
 
                        parent.getItemAtPosition(selectedltemPosition);
                        String pos = (String) parent.getItemAtPosition(selectedltemPosition);
                        int posID = (int) parent.getSelectedItemPosition();
 
                        TetTempoDate.temp_str_1 = pos;
 
                        Log.e(pseudo_tag, "spinn pos=" + pos + "  posID=" + posID + "");
 
                        setServer(posCountryId, posID);
                    }
 
                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
 
                    }
 
                    //… Other required overrides
 
                });
    }
 
    private void setServer(int posCountryId, int pos) {
 
        if (posCountryId == 1) { // Rusian federation
            city = pos;
            switch (pos) {
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    serverField = "brd.tet-a-tet.mobi";
                    dispField = "ustyug";
                    break;
                case 8:
                    break;
                case 9:
                    break;
                case 10:
                    break;
                case 11:
                    break;
                default:
                    break;
            }
 
        } else if (posCountryId == 2) { // Ukrain
            city = pos;
 
            switch (pos) {
                case 1:
                    break;
                case 2:
                    // Berdichev
                    serverField = "brd.tet-a-tet.mobi";
                    dispField = "tetatet";
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    break;
                case 8:
                    break;
                case 9:
                    break;
                case 10:
                    break;
                case 11:
                    break;
                default:
                    break;
            }
        } else if (posCountryId == 3) { // Belarus
            city = pos;
            switch (pos) {
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    break;
                case 8:
                    break;
                case 9:
                    break;
                case 10:
                    break;
                case 11:
                    break;
                default:
                    break;
            }
        }
 
        
    }
 
 
    private void setTemp() {
        TextView phoneField = (TextView) findViewById(R.id.phoneField);
        TextView carField = (TextView) findViewById(R.id.carModelField);
        TetTempoDate.temp_str_2 = phoneField.getText().toString();
        TetTempoDate.temp_str_3 = carField.getText().toString();
 
    }
 
 
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    }
 
    private EditText getEditText() {
        return (EditText) findViewById(R.id.phoneField);
    }
 
    private EditText getCarModelField() {
        return (EditText) findViewById(R.id.carModelField);
    }
 
 
    private Intent gogoclick() {
 
        Intent return_from_JabberdLoginActivity_Intent = new Intent();
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJBP_KEY, pass);
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJBS_KEY, server);
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJBU_KEY, user);
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJCALEE_KEY, disp);
 
        return return_from_JabberdLoginActivity_Intent;
 
    }
 
 
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.jabberOkButton:
                //TODO implement
                TextView userField = (TextView) findViewById(R.id.jabberUserField);
                TextView passField = (TextView) findViewById(R.id.jabberPasswordField);
                server = serverField;
                user = userField.getText().toString();
                pass = passField.getText().toString();
                disp = dispField;
                if (city == 0) {
                    Toast.makeText(getApplicationContext(), R.string.noTown, Toast.LENGTH_SHORT).show();
                    //onResume();
                } else if (user.length() == 0) {
                    Toast.makeText(getApplicationContext(), R.string.noJabUser, Toast.LENGTH_LONG).show();
                    //onResume();
                } else if (pass.length() == 0) {
                    Toast.makeText(getApplicationContext(), R.string.noJabPasswd, Toast.LENGTH_LONG).show();
                    //onResume();
                } else {
 
                    TetGlobalData.CARRENT_ACTIVITY = TetGlobalData.JAB_LOGIN_ACTIVITY;
                    TetGlobalData.jabLoginAttempts = TetGlobalData.jabLoginAttempts + 1;
                    setResult(RESULT_FIRST_USER, gogoclick());
                    finish();
                }
                break;
            case R.id.buttoniHaveNotLogin:
                //TODO implement
                Intent nR = new Intent(getApplicationContext(), mobi.tet_a_tet.atda.tet_a_tet.FirstRegistration.NotRegisteredYetActivity.class);
                // Oth.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(nR);
                break;
            case R.id.buttonExit:
                //TODO implement
                Intent mA = new Intent(getApplicationContext(), MainActivity.class);
                mA.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(mA);
                finish();
                break;
        }
    }
 
    @Override
    public void onDestroy() {
        EventBus.getDefault().unregister(this);
        Log.e(pseudo_tag, "FINISHED");
        super.onDestroy();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Log.e(pseudo_tag, "onResume()");
    }
}
Кусок xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/spinnerCountry"
                android:entries="@array/country_arrays"
                android:focusable="true"
                android:layout_weight="0.4" />
 
        </TableRow>
 
        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:focusableInTouchMode="false">
 
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="@string/cityIDE"
                android:id="@+id/citytextView"
                android:layout_weight="1" />
 
            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/spinnerCity"
                android:focusable="true"
                android:layout_weight="0.47" />
 
        </TableRow>
Естественно в ресурсах (strings.xml )есть запись:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    <string name="country">Страна</string>
 
    <string-array name="country_arrays">
        <item>Укажите страну</item> <!-- 0 -->
        <item>Россия</item> <!-- 1 -->
        <item>Украина</item> <!-- 2 -->
        <item>Беларусь</item> <!-- 3 -->
    </string-array>
 
    <string-array name="city_ru_arrays">
        <item>Укажите город</item> <!-- 0 -->
        <item>Ижевск</item> <!-- 1 -->
        <item>Ковров</item> <!-- 2 -->
        <item>Тазовский</item> <!-- 3 -->
        <item>Воткинск</item> <!-- 4 -->
        <item>Шадки</item> <!-- 5 -->
        <item>Череповец</item> <!-- 6 -->
        <item>В. Устюг</item> <!-- 7 -->
    </string-array>
 
    <string-array name="city_ua_arrays">
        <item>Укажите город</item> <!-- 0 -->
        <item>Белая Церковь</item> <!-- 1 -->
        <item>Бердичев</item> <!-- 2 -->
        <item>Казатин</item> <!-- 3 -->
        <item>Кельменцы</item> <!-- 4 -->
        <item>Новомосковск</item> <!-- 5 -->
        <item>Мироновка</item> <!-- 6 -->
        <item>Мукачево</item> <!-- 7 -->
        <item>Рубежное</item> <!-- 8 -->
        <item>Житомир</item> <!-- 9-->
    </string-array>
 
    <string-array name="city_by_arrays">
        <item>Укажите город</item>
        <item>Лепель</item> <!-- 1 -->
    </string-array>
Ответ: Насчет БД я так и предполагал.
К сожалению/счастью список из статичного вырос до динамичного.
Он тянется с сервера и может меняться в зависимости от добавления/удаления города, изредка это может касаться страны.
Так же много что было статичным ранее и было "для себя", могло вносится ручками, а теперь разрослось и требует динамической загрузки с сервака "для других" и естественно все приходится переписывать.