Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
mathahakar
2 / 2 / 1
Регистрация: 31.01.2014
Сообщений: 80
1

Минимальное и максимальное значение для EditText

26.08.2015, 23:05. Просмотров 1428. Ответов 4
Метки нет (Все метки)

Имеется EditText и SeekBar.
XML
1
2
3
4
5
6
7
8
9
10
11
12
<EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/KNVet"
            android:layout_weight="2"
            android:inputType="numberDecimal"
            android:textColor="#ffffff"
            android:maxLength="3" />
<SeekBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/SeekStrength" />
Для наглядности:
Минимальное и максимальное значение для EditText


SeekBar задаёт значение для EditText:
Java
1
2
3
4
@Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
KNVet.setText(String.valueOf(SeekStrength.getProgress()));
    }
Также, при изменение "вручную" текста (числа) в EditText, SeekBar меняет свою позицию:
Java
1
2
3
4
5
6
7
8
9
@Override
    public void onClick(View v) {
        switch (v.getId()){       
            case R.id.KNVet:
                float KNVfET = Float.parseFloat(KNVet.getText().toString());
                SeekStrength.setProgress((int)KNVfET);
                break;
        }
    }
Вопрос в том, как установить рамки для значений?
Необходимо сделать так, чтобы в EditText можно было вводить, скажем, значения с 10 до 25, и чтобы при перемещении SeekBar значения опять таки менялись в этом диапазоне, а не 0-100.

Если можно, пожалуйста, самый простой способ реализации (как для новичка). Заранее спасибо большое.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2015, 23:05
Ответы с готовыми решениями:

Ввод в один EditText и авто-вычисление в двух других EditText
Всем привет. Есть три поля EditText,виртуальные клавиатуры у всех заблокированы,а ввод чисел в...

EditText смещается вниз при вводе текста, который занимает объём больше, чем EditText
EditText сещается вниз при вводе текста который занимает обём больше чем EditText. Как устранить?

Динамическое создание edittext и обработка данных из edittext
Здравствуйте, мне нужна помощь, у меня есть таблица, где динамически создаются edittext: for (int ...

EditText getText возвращает устаревшее значение
При повороте экрана, последний набранный текст исчезает. Просто исчезает. Сохранение его в виде...

Не могу подать значение из EditText в BasicNameValuePair
package ru.smart.myapplication; import android.app.Activity; import android.app.ProgressDialog;...

4
Mikalai
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
27.08.2015, 00:20 2
Лучший ответ Сообщение было отмечено mathahakar как решение

Решение

Попробуй так сделать:
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
private final int minValue = 10;
private final int maxValue = 25;
 
//..........
 
@Override
    public void onClick(View v) {
        switch (v.getId()){       
            case R.id.KNVet:
                float KNVfET = Float.parseFloat(KNVet.getText().toString());
                if(KNVfET < minValue) KNVfET = minValue;
                if(KNVfET > maxValue) KNVfET = maxValue;
                SeekStrength.setProgress((int)KNVfET);
                break;
        }
    }
 
@Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
             if(progress < minValue) {
                    progress = minValue;
                    seekBar.setProgress(progress);
             }
             if(progress > maxValue) {
                    progress = maxValue;
                    seekBar.setProgress(progress);
             }
             KNVet.setText(String.valueOf(progress));
    }
1
mathahakar
2 / 2 / 1
Регистрация: 31.01.2014
Сообщений: 80
27.08.2015, 00:51  [ТС] 3
Спасибо большое, попробую так.
0
mathahakar
2 / 2 / 1
Регистрация: 31.01.2014
Сообщений: 80
28.08.2015, 13:12  [ТС] 4
Ничего не выходит
Дело всё в том, что диапазон динамический, и он зависит от значения предыдущего EditText.
Что я делаю неправильно?
Вот весь код:
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
package com.mathahakar.e_cigmaster;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.SeekBar;
 
public class DIYliq extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener, View.OnClickListener {
 
    EditText KBet, KNVet, ONVet, H2Oet, PGet, VGet;
    CheckBox H2Ocb;
    SeekBar SeekBase, SeekStrength, SeekWater, SeekBalance;
    Button CalcLiqDiy;
 
    private int KNVmin, KNVmax;
 
    @Override
    protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diy_liq);
 
        KBet = (EditText) findViewById(R.id.KBet);
        KNVet = (EditText) findViewById(R.id.KNVet);
        ONVet = (EditText) findViewById(R.id.ONVet);
        H2Oet = (EditText) findViewById(R.id.H2Oet);
        PGet = (EditText) findViewById(R.id.PGet);
        VGet = (EditText) findViewById(R.id.VGet);
        H2Ocb = (CheckBox) findViewById(R.id.H2Ocb);
        SeekBase = (SeekBar) findViewById(R.id.SeekBase);
        SeekStrength = (SeekBar) findViewById(R.id.SeekStrength);
        SeekWater = (SeekBar) findViewById(R.id.SeekWater);
        SeekBalance = (SeekBar) findViewById(R.id.SeekBalance);
        CalcLiqDiy = (Button) findViewById(R.id.CalcLiqDiy);
 
        SeekBase.setOnSeekBarChangeListener(this);
        KBet.setOnClickListener(this);
 
 
 
    }
 
    @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_diy_liq, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
 
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        KBet.setText(String.valueOf(SeekBase.getProgress()));
        int KB = Integer.parseInt(KBet.getText().toString());
        if(KB>0){KNVmin=1; KNVmax=KB;}else{KNVmin=0;KNVmax=0;}
 
        KNVet.setText(String.valueOf(SeekStrength.getProgress()));
 
 
 
    }
 
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
 
    }
 
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
 
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.KBet:
                int KB = Integer.parseInt(KBet.getText().toString());
                SeekBase.setProgress(KB);
                KNVet.requestFocus();
                break;
            case R.id.KNVet:
                int KNV = Integer.parseInt(KNVet.getText().toString());
                if(KNV>KNVmax){KNVet.setText(KNVmax);}
                if(KNV<KNVmin){KNVet.setText(KNVmin);}
 
                break;
 
 
        }
 
    }
}
Вот скрин с пояснениями:
Минимальное и максимальное значение для EditText


В итоге, работает так:
Передвинут ползунок SeekBase -> KBet реагирует, меняя число на экране (при изменении числа с клавиатуры ползунок занимает соответствующее положение); после нажатия клавиши вперёд фокус смещается на KNVet, где появляется "0" во всех случаях, хоть в KBet установлен "0", хоть больше.
Нужно же, чтобы после установки значения в KBet устанавливался диапазон допустимых значений для KNVet с таким условием:
Java
1
2
int KB = Integer.parseInt(KBet.getText().toString());
if (KB > 0) {KNVmin=1; KNVmax=KB}else{KNVmin=0; KNVmax=0};
Так же, не разобрался, как сделать диапазон для SeekStrength.
Цитата Сообщение от Mikalai Посмотреть сообщение
Java
1
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(progress < minValue) { progress = minValue; seekBar.setProgress(progress); } if(progress > maxValue) { progress = maxValue; seekBar.setProgress(progress); } KNVet.setText(String.valueOf(progress)); }
Объясните, пожалуйста, детальнее.
0
mathahakar
2 / 2 / 1
Регистрация: 31.01.2014
Сообщений: 80
31.08.2015, 11:24  [ТС] 5
Проблема решилась.
Если кому интересно:
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
package com.mathahakar.e_cigmaster;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.Toast;
 
 
public class DIYliq extends AppCompatActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener {
 
    int KNVmin, KNVmax;
 
    EditText KBet, KNVet, ONVet, H2Oet, PGet, VGet;
    CheckBox H2Ocb;
    SeekBar SeekBase, SeekStrength, SeekWater, SeekBalance;
    Button CalcLiqDiy;
 
    @Override
    protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diy_liq);
 
        KBet = (EditText) findViewById(R.id.KBet);
        KNVet = (EditText) findViewById(R.id.KNVet);
        ONVet = (EditText) findViewById(R.id.ONVet);
        H2Oet = (EditText) findViewById(R.id.H2Oet);
        PGet = (EditText) findViewById(R.id.PGet);
        VGet = (EditText) findViewById(R.id.VGet);
        H2Ocb = (CheckBox) findViewById(R.id.H2Ocb);
        SeekBase = (SeekBar) findViewById(R.id.SeekBase);
        SeekStrength = (SeekBar) findViewById(R.id.SeekStrength);
        SeekWater = (SeekBar) findViewById(R.id.SeekWater);
        SeekBalance = (SeekBar) findViewById(R.id.SeekBalance);
        CalcLiqDiy = (Button) findViewById(R.id.CalcLiqDiy);
 
        KBet.setOnClickListener(this);
        KNVet.setOnClickListener(this);
 
        SeekBase.setOnSeekBarChangeListener(this);
        SeekStrength.setOnSeekBarChangeListener(this);
 
        SeekStrength.setEnabled(false);
 
 
 
    }
 
 
    @Override
    public void onClick(View v) {
    switch(v.getId()) {
        case R.id.KBet:
            int KB = Integer.parseInt(KBet.getText().toString());
            SeekBase.setProgress(KB);
            if(KB>0){KNVmin=1; KNVmax=KB;}else{KNVmin=0; KNVmax=0;}
            if (KB>0){KNVet.setText("1"); SeekStrength.setEnabled(true);}
            else{KNVet.setText("0"); KNVet.setEnabled(false); SeekStrength.setEnabled(false);}
            ONVet.requestFocus();
            break;
        case R.id.KNVet:
            int KNV = Integer.parseInt(ONVet.getText().toString());
            SeekStrength.setProgress(KNV);
            break;
 
        }
    }
 
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 
        switch(seekBar.getId()) {
            case R.id.SeekBase:
                KBet.setText(String.valueOf(SeekBase.getProgress()));
                break;
            case R.id.SeekStrength:
                KNVet.setText(String.valueOf(SeekStrength.getProgress()));
                break;
        }
 
    }
 
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
 
    }
 
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        switch(seekBar.getId()) {
            case R.id.SeekBase:
                int KB = Integer.parseInt(KBet.getText().toString());
                if(KB>0){KNVmin=1; KNVmax=KB;}else{KNVmin=0; KNVmax=0;}
                if (KB>0){KNVet.setText("1"); SeekStrength.setEnabled(true);}
                else{KNVet.setText("0"); KNVet.setEnabled(false); SeekStrength.setEnabled(false);}
                break;
            case R.id.SeekStrength:
                int KNV = Integer.parseInt(KNVet.getText().toString());
                if (KNV<KNVmin){KNVet.setText(Integer.toString(KNVmin)); SeekStrength.setProgress(KNVmin);}
                if (KNV>KNVmax){KNVet.setText(Integer.toString(KNVmax)); SeekStrength.setProgress(KNVmax);}
        }
    }
}
0
31.08.2015, 11:24
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2015, 11:24

Обновить значение EditText после получения данных от диалогового окна
Здравствуйте. В моем приложении есть несколько EditText'ов. При нажатии на один из них я вызываю...

Как получить значение, введенное пользователем в EditText, созданного программно?
Уважаемые программисты, очень нужна помощь. У меня имеется на форме кнопка, которая создает новый...

Найти минимальное значение для первой строки и максимальное значение для первого столбца
найти для матрицы М2 минимальное значение для 1 строки и максимальное значение для 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.