Программируем на смартфоне » Страница 13

-

Программирование под Android



Zaterehniy


репутация: 704
на сайте с 2006 года
сообщений: 2504

Google Pixel 7a

Ставрополь

Возраст - 37

#122

На Премиум ключик aide скидка 50% в плей. До 31 декабря продлится.

Zaterehniy


репутация: 704
на сайте с 2006 года
сообщений: 2504

Google Pixel 7a

Ставрополь

Возраст - 37

#123

Вот способ реализовать ввод цифр в textedit . не фонтан конечно но выход из ситуации решить поможет в какой то степени.


//Init variables. 
var sum = ""; 

//Called when application is started. 
function OnStart() 

    //Create a layout with objects vertically centered. 
    layMain = app.CreateLayout( "linear", "FillXY" );     

    //Create array to hold number buttons. 
    keys = [ 1,2,3, 4,5,6, 7,8,9, 0,"ok","c" ]; 
     
    //Create text control for displaying sum. 
    txtSum = app.CreateText( "", 0.8, 0.1 ); 
    txtSum.SetTextSize( 42 ); 
    txtSum.SetBackColor( "#ff222222" ); 
    txtSum.SetMargins( 0, 0.1, 0, 0.05 ); 
    layMain.AddChild( txtSum ); 
     
    //Create first row of buttons. 
    lay1st = app.CreateLayout( "linear", "Horizontal" );     
    for( i=0; i<4; i++ ) AddButton( lay1st, keys[i] ); 
    layMain.AddChild( lay1st ); 
     
    //Create second row of buttons. 
    lay2nd = app.CreateLayout( "linear", "Horizontal" );     
    for( i=4; i<8; i++ ) AddButton( lay2nd, keys[i] ); 
    layMain.AddChild( lay2nd ); 
     
    //Create third row of buttons. 
    lay3rd = app.CreateLayout( "linear", "Horizontal" );     
    for( i=8; i<12; i++ ) AddButton( lay3rd, keys[i] ); 
    layMain.AddChild( lay3rd ); 
    //выводим результат ввода номера
    txtViewNumber = app.CreateText( "" );
    txtViewNumber.SetTextSize( 22 );
    layMain.AddChild( txtViewNumber );
     
    //Add layout to app.     
    app.AddLayout( layMain ); 


//Add a button to a given layout. 
function AddButton( lay, name ) 

    if( name=="=" ) w = 0.8; else w=0.2; 
    btn = app.CreateButton( name, w, 0.1, "Alum" ); 
    btn.SetOnTouch( btns_OnTouch ); 
    lay.AddChild( btn ); 


//Called when user presses number buttons. 
function btns_OnTouch() 

     
    //Get button text. 
    btn = app.GetLastButton(); 
    var txt = btn.GetText(); 
     
    //Handle equals button. 
    if( txt=="ok" ) txtViewNumber.SetText( txtSum.GetText() );
     
    //Handle clear button. 
    else if( txt=="c" ) sum = ""; 
     
    //Handle other buttons. 
    else sum += txt; 
     
    //Update display. 
    txtSum.SetText( sum );


//Calculate sum. 
function CalcResult() 

    try { 
        //Evaluate sum (and catch errors). 
        sum = eval( sum ).toFixed(2); 
    } 
    catch(e) { sum = "Error" } 




-------------
добавлено в 01.52: За основу взят пример калькулятора. Немного доделав можно получить такое - допустим нам надо ввести число - делаем кнопку на первой активити , жмем , выпадает второе активити с цифровым вводом. Вводим нужные цифры, жмем окей , данные передаются в переменную, откуда мы можем их достать. Если надо могу все доделать и выложить пример использования.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#124

Идея понятна. Тоже вариант. Надо точку добавить для ввода float и контролировать ввод при каждом нажатии, чтоб две точки запрещало вводить. И стирать по одному символу. Изначально ноль желательно чтоб горел, при вводе числа заменялся на него, при удалении всех чисел снова ноль. Вобщем там не так уж немного доработать)). Нижнее поле ненужно, что ввел, то ввел, нажал ок (привычнее стрелочку enter), результат вставился в кнопку (или не ввелся, если вместо числа введена одна точка и все). Если есть желание- сделай пример. Кстати, аппаратную кнопку назад можно тоже повесить на продублирование ок, или она только программу закрывать может? Не копал это еще...

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#125

//Init variables. 
var sum = "0"; 
var maxvalue = 99999999.99;
var round = 2;

//Called when application is started. 
function OnStart() 

    //Create a layout with objects vertically centered. 
    layMain = app.CreateLayout("linear", "FillXY");     

    //Create array to hold number buttons. 
    keys = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, ".","⇦", "C", "↺", "Ok"]; 
     
    //Create text control for displaying sum. 
    txtSum = app.CreateText(sum, 0.9, 0.1); 
    txtSum.SetTextSize(30); 
    txtSum.SetBackColor("#222222"); 
    txtSum.SetMargins(0, 0.45, 0, 0.01); 
    layMain.AddChild(txtSum); 
     
    //Create first row of buttons. 
    lay1st = app.CreateLayout("linear", "Horizontal");     
    for( i=0; i<4; i++) AddButton(lay1st, keys[i]); 
    layMain.AddChild(lay1st); 
     
    //Create second row of buttons. 
    lay2nd = app.CreateLayout("linear", "Horizontal");     
    for(i=4; i<8; i++) AddButton(lay2nd, keys[i]); 
    layMain.AddChild(lay2nd); 
     
    //Create third row of buttons. 
    lay3rd = app.CreateLayout("linear", "Horizontal");     
    for(i=8; i<12; i++) AddButton(lay3rd, keys[i]); 
    layMain.AddChild(lay3rd); 

    lay4rd = app.CreateLayout("linear", "Horizontal");     
    for(i=12; i<15; i++) AddButton(lay4rd, keys[i]); 
    layMain.AddChild(lay4rd);
     
    //Add layout to app.     
    app.AddLayout(layMain); 


//Add a button to a given layout. 
function AddButton(lay, name) 

    w = name == "Ok" ? 0.45 : 0.225;
    btn = app.CreateButton(name, w, 0.1, "Gray"); 
    btn.SetOnTouch(btns_OnTouch); 
    btn.SetTextSize(20);
    lay.AddChild(btn); 


//Called when user presses number buttons. 
function btns_OnTouch() 

     
    //Get button text. 
    btn = app.GetLastButton(); 
    var txt = btn.GetText();
    
     
    //Handle equals button. 
    if(txt == "Ok") true;
    //cancel
    else if(txt == "↺") {
        sum = "0";
        // .......
        }
    //clear
    else if(txt == "C") sum = "0";     
    //Handle clear button. 
    else if(txt == "⇦") {
        sum = sum.slice(0, -1); 
        if (sum == "") sum = "0"
        }
    else if(txt == ".") {
        if (sum.indexOf(".") != -1) txt = "";
        sum += txt; 
        }
    //Handle other buttons. 
    else {           
           if (sum == "0") sum = "";
           else if (eval(sum + txt) > maxvalue || sum.slice(sum.indexOf("."), -1).length == round) txt = "";
           sum += txt;
         }
     
    //Update display. 
    txtSum.SetText(sum);
}




вот переделал немного на досуге. Только я вот не врублюсь- это что, всю программу одним скриптом писать, чисто на функциях? js плохо знаю просто...
-------------
добавлено в 20.32: Разобрался, можно классы имитировать

Zaterehniy


репутация: 704
на сайте с 2006 года
сообщений: 2504

Google Pixel 7a

Ставрополь

Возраст - 37

#126

dimy44,
вот еще лучше. Главное преимущество это никаких зависимостей.
-------------
добавлено в 21.39: Вот тут еще можно почитать о разбиении кода(модульность)Cсылка

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#127

Надо мне пару деньков документацию подучить, потом чето писать. А то вроде и понятно все, но потом придется все переписывать, когда выяснится что код ужасен, было уже такое))

Zaterehniy


репутация: 704
на сайте с 2006 года
сообщений: 2504

Google Pixel 7a

Ставрополь

Возраст - 37

#128

Я думаю момент, который помешал портированию вашей программы, решен. Все необходимое для порта имеется. При желании можно сделать.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#129

Есть еще момент, над которым предстоит подумать. Тут ведь нету аналога ScrollView. А у меня заранее не известно количество полей с виджетами, динамически создаются пользователем. Ну, естественно реализация корявая, т.к. при добавлении очередного поля с виджетами перерисовывается все полностью, в сл4а хз как иначе. Но там это засовываешь в ScrollView и не паришься по поводу того, что вдруг чего не поместится. Тут же такого нету. Приду домой с работы, буду макеты пробные делать, смотреть как лучше реализовать.
-------------
добавлено в 14.46: и еще, если мне понадобится созданный layout в дальнейшем, как убрать с него старые виджеты, чтоб новые рзместить?

Zaterehniy


репутация: 704
на сайте с 2006 года
сообщений: 2504

Google Pixel 7a

Ставрополь

Возраст - 37

#130

dimy44,
к примеру можно скролл лист использовать.


function OnStart()
{
  lay = app.CreateLayout( "Linear", "VCenter,FillXY" );

  var data = "";
  for( var i=1; i<=30; i++)
  {
    if( i>1 ) data += ",";
    data += "Item "+i+":Details for item "+i+":null";
  }
  lst = app.CreateList( data, 1, 1, "WhiteGrad" );
  lst.SetTextColor1( "#ff555558");
  lst.SetTextColor2( "#ff555558" );
  lst.SetTextMargins( 0.04, 0, 0, 0 );
  lst.SetOnTouch( lst_OnTouch );
  lay.AddChild( lst );

  app.AddLayout( lay );
}

function lst_OnTouch( item )
{
  app.ShowPopup( "Touched Item = " + item );
}

Элементами можно управлять. Кажется в документации приводятся примеры.


Яндекс.Метрика