Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как сделать меню состояшее с отдельных частей

Всем привет,

Мучаю Android ... Столкнулся с проблемой что не могу найти примера с меню состоящим из нескольких часте:

(IMG:)

Вот как в примере выше. Слева от Shedule кнопка в виде трех полосок, а справа кнопки поиска и три точки выпадающего меню.
Я не нашел не одного примера как перенести кнопку в виде трех полосок влева.

У меня же получилось следующее:



Может ли кто нибудь подсказать как поменять стиль или параметры меню чтобы кнопка с трем полосками сместилась влево ?

Буду весма признателен !!
Ответ:
Создадим приложение с двумя пунктами в options-меню. Один пункт — refresh вынесем как иконку в Action Bar, а второй — settings будет отображаться только в меню
Вопрос: Переключение Layout ПОД меню

Я имею меню (оно состоит из нескольких XML файлов),имею множество conten.xml файлов,нужно сделать так чтоб по нажатию на определенный пункт меню открывался нужный layout (в одном из xml файлов меню располагается задняя часть меню (грубо говоря сам контент)) . Пробовал подгружать Layout в меню при помощи ViewSub и include (ясен пень ничего не вышло так как один нельзя программно менять а другой нельзя менять после создания).
Собственно вопрос в том как это сделать и если можно с примерами кода.
Ответ: напишите за меня в другом разделе

где твой код, разметки и так далее?
Вопрос: Не отображается пункт меню в ActionBar

Приветствую,

Сделал меню
Код XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<menu 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"
    tools:context="ru.blablabla.app.MainActivity" >
    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="never" />
    <item android:id="@+id/action_operation"
        android:title="operation"
        android:icon="@drawable/ic_launcher"
        app:showAsAction="always" />
</menu>
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
В превью иконка появляется в ActionBar, запускаю приложение - нету. Что может быть?
Ответ: У меня в правом углу тупо отсутствуют три точки изображающие меню...я сменил значение невер на олвейс и появилась надпись сеттинг...как сделать что бы были три точки то?

Добавлено через 21 минуту
простите сменил эмулятор с 17 на 19 и все норм
Вопрос: Как сделать меню аккордеон в Android приложении

Нужно реализовать меню аккордеон, в котором есть список объектов, в интернете не нашел путной инфы о том как сделать такое меню, может кто знает как это можно сделать? и есть ли какие стандартные средства для этого?
Ответ:
Вопрос: Как сделать меню в шаблоне Google maps Activity Android studio

Здравствуйте создал шаблон google maps хотел разместить елементи управления.
И у меня не получается потому-что:
На форму не могу разместить кнопки среда не разрешает.
Меню вроде как подключаю но оно не отображаеться.
Помогите пожалуйста.
Мне нужна:
Лыбо документация на эту тему.
Или пример.
Или хоть-что-то.
Ответ: Только с этим.
Вопрос: Отображение меню в OptionMenu в трёх точках

Смартфон на android 4.2.2

Хочу сделать меню чтоб была кнопка "Добавить", в виде иконки с изображением.

код xml:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<menu 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"
    tools:context=".CrimeListActivity">
    <item
        android:id="@+id/menu_item_new_crime"
        android:icon="@android:drawable/ic_menu_add"
        android:title="@string/new_crime"
        app:showAsAction="ifRoom|withText"
        />
        <item
        android:id="@+id/menu_option"
        android:title="@string/option"
        />
</menu>

Добавляю его в фрагмент через метод



Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment_crime_list, menu);
    }
Потом
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
}
Проблема в том, что меню отображается только когда нажимаю кнопку опций на самом смартфоне!
А мне нужно чтоб один пункт меню отображался иконкой на екшен баре, а в торой в виде меню трех точек ?
в чем может быть проблема? И как ее решить ?
Ответ:
XML
1
app:showAsAction="ifRoom|withText"
withtext тут лишний, система просто может считать что не хватает места в тулбаре и не показывает ни иконку ни текст, если не будет текста, с большой вероятностью одна иконка вместится
Вопрос: Ошибка при парсинге или как лучше сделать?

Ребята помогите пожалуйста. В папке assets у меня 7 txt. файлов.7 вопросов.

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

8 нажатие выскакивает ошибка, мол 8 файла нет.Оно и понятно, ведь его действительно нет.

Так как у меня парсинг происходит в отдельном класе, то в MainActivity

каждый фаил записывается в стринг переменную и потом разбивается на токины.

Java
1
2
String s1 = LoadTXT.TXT(this, parsing_txt);// записываем содержимое файла в переменную типа string
                     StringTokenizer st1 = new StringTokenizer(s1, "*");
Я решил сделать вот такую проверку:

Java
1
2
3
4
5
String end =  "8.txt";// файла которого нет
 
                 if(parsing_txt.equals(end)){
                     displayResult();
                 }

Я сравнил два стринга и все работает. Однако, препАД не принимает такую реализацию, говорит можно сделать все проще.

Подскажите как? интовую переменную, которая подсчитывает номер вопроса тоже использовать нельзя.
Ответ: Ребята, взял часть кода где возникает ошибка в try-catch и решил не париться.
Вопрос: Кусок кода в отдельный класс

Ребята, всем доброй ночи. Написал я свою первую программу тест, но мама мия! У меня не activity а простыни какие то. И я понимаю, что со временем будет только хуже и жутко не удобно. Вычитал, что можно функции вынести в отдельный класс и подключатся к нему из главной activity, а вот сделать это на практике не могу. P.S. Может есть книги где можно почитать как это сделать?

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
 if(reed==12){ // ecли пройдено 12 ячеек
                if(tobe){// если нажат пункт меню ToBe...
                    if(mySettings1.contains(Tobe_ArrayList)){// если сохранен Tobe_ArrayList
 
                        SharedPreferences.Editor editor = mySettings1.edit();
                        editor.remove("Tobe_ArrayList"); // удаляем Tobe_ArrayList
                        editor.apply();
 
 
                        displayResult2();
 
                    }
                    else {//ecли пройдено 12 ячеек и нажат пункт меню ToBe, но НЕ сохранен Tobe_ArrayList
 
                        displayResult();
 
                        listStr = new Gson().toJson(new ArrayList<Integer>(Arrayl));// сохраняю Arrayl в строку
 
                        Log.d("","Сохраненный Tobe_ArrayList:" + Arrayl);
 
                        SharedPreferences.Editor editor = mySettings1.edit();
                        editor.putString(Tobe_ArrayList, listStr);// cохраняем Arrayl в строке в SharedPreferences
                        editor.apply();
                    }
 
 
            }//End Push_ToBe
 
            }//if(reed==12)
 
          if(itenglish){// если нажат пункт меню IT English
 
            if(reed==12){// ecли пройдено 12 ячеек
 
                if(mySettings1.contains(ITenglish_ArrayList)){// если сохранен ITenglish_ArrayList
 
                    SharedPreferences.Editor editor = mySettings1.edit();
                    editor.remove("ITenglish_ArrayList"); // удаляем ITenglish_ArrayList
                    editor.apply();
 
 
                } // End ITenglish_ArrayList
 
                else{//ecли нажато меню IT English и пройдено 12 ячеек, но НЕ сохранен параметр ITenglish_ArrayList
 
                    displayResult();
 
                    listStr = new Gson().toJson(new ArrayList<Integer>(Arrayl));// сохраняю Arrayl в строку
                    System.out.println("Сохраненный ITenglish_ArrayList" + Arrayl);
 
                    SharedPreferences.Editor editor = mySettings1.edit();
                    editor.putString(ITenglish_ArrayList, listStr);// cохраняем Arrayl в строке в SharedPreferences
                    editor.apply();
                }
 
            }// End reed
 
          }// End itenglish
Ответ: есть несколько варриантов как это сделать, зависит от самой функции.
1) Делаются классы Utils, с паблик статик функциями, например если в приложении надо конвертировать миллисекуны в дни, или в часы, то делаем класс ConvertUtils, в нем деалаем:
Java
1
2
3
4
5
public static int milliToDays(long millisec){
int days = 0;
//конвертируем 
return days;
}
и теперь с мейн активити просто вызываем Названиекласса.названиефункции,int days = ConvertUtils.milliToDays(121211213);

таким образом все методы связанные в одну общую тему будут лежать в одном ютилс и можно с любого места в проекте их достать.

2) Создание обьектов или вью со своими функциями. например если в строчке есть кнопка и эдит текст, можно их запихнуть в один класс, и в нем выполнять операции связанные с этими двумя обьектами а в мейн только возвращать результат. это посложнее.
3) создание менеджеров. например у Вас в проекте повторяются ШаредПреференс, их можно запихнуть в менеджер, создать класс шаредпреференсменеджер, обычно такие классы синглтон, и в нем собрать список всех функций которые по теме шардпреференс. так же такой менеджер может быть статическим классом как в первом случае. сингл тон обычно не советуют использовать, он может делать лики, им надо уметь пользоваться и правельно передавать ему контекст.

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

Я пишу программу в горизонтальной ориентации.

У меня есть картинка размером 512х652 пикселя.

Я хочу, чтобы картинка, не меняя пропорции сторон, растянулась по ширине экрана(длинная часть).

После этого картинка в таком положении должна проплыть по экрану снизу вверх, тем самым показав невидимые области по высоте.

Как это сделать не знаю даже примерно, потому кода нет.

Прошу помощи.
Ответ: prouraist, если изображение вставить в ImageView, то его обрежет и двигать будет нечего. Можно сделать при помощи рисования в SurfaceView. взял пример кода и переписал чутка. Подходит для любого изображения. показывает верхнюю часть картинки растягивая по ширине без изменения пропорций. при нажатии на экран двигается вверх до нижнего края. В манифесте для этого Activity ставил android:screenOrientation="landscape". Получилось много кода:

Код 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
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
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
 
 
public class MainActivity extends Activity implements OnClickListener,
        SurfaceHolder.Callback {
 
    Bitmap bitmap;
    SurfaceView surfaceView;
    DrawingThread thread;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        //загружаем изображение
        bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.sun);
 
        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
        surfaceView.getHolder().addCallback(this);
        surfaceView.setOnClickListener(this);
    }
 
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        thread = new DrawingThread(holder, bitmap);
        thread.start();
    }
 
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {}
 
    @Override
    public void onClick(View v) {
        thread.startMotion();
    }
 
    @Override
    public void onBackPressed() {
        thread.quit();
        thread = null;
        finish();
    }
 
    private static class DrawingThread extends HandlerThread implements Handler.Callback {
 
        private static final int SHOW = 1;
        private static final int MOVE = 2;
        private SurfaceHolder holder;
        private Handler handler;
        private Bitmap bitmap;
        private int deltaY;
        private int bitmapY = 0;
 
        public DrawingThread(SurfaceHolder holder, Bitmap bitmap) {
            super("DrawingThread");
            this.holder = holder;
            this.bitmap = bitmap;
        }
 
        @Override
        protected void onLooperPrepared() {
            handler = new Handler(getLooper(), this);
            handler.sendEmptyMessage(SHOW);
        }
 
        public void startMotion() {
            handler.sendEmptyMessage(MOVE);
        }
 
        @Override
        public boolean quit() {
            handler.removeCallbacksAndMessages(null);
            return super.quit();
        }
 
        @Override
        public boolean handleMessage(Message msg) {
            Canvas canvas;
            switch (msg.what) {
                case SHOW:
                    bitmapY = 0;
                    canvas = holder.lockCanvas();
 
                    //подгоняем изображение под размер экрана
                    float scaleCoefficient = (float)canvas.getWidth() / (float)bitmap.getWidth();
                    int dstWidth = canvas.getWidth();
                    int dstHeight = (int) (bitmap.getHeight() * scaleCoefficient);
                    bitmap = Bitmap.createScaledBitmap(bitmap, dstWidth, dstHeight, false);
 
                    //определяем на какое расстояние будет двигаться изображение
                    this.deltaY = canvas.getHeight() - bitmap.getHeight();
 
                    canvas.drawBitmap(bitmap, 0f, 0f, null);
                    holder.unlockCanvasAndPost(canvas);
                    return true;
                case MOVE:
                    canvas = holder.lockCanvas();
                    canvas.drawBitmap(bitmap, 0f, bitmapY, null);
                    holder.unlockCanvasAndPost(canvas);
                    bitmapY -=2;
                    if(bitmapY < deltaY) {
                        handler.sendEmptyMessage(SHOW);
                        return true;
                    }
            }
            handler.sendEmptyMessage(MOVE);
            return true;
        }
    }
}
Вопрос: MPAndroidChart. Как вывести 2 отдельных диаграммы?

Всем привет. Работаю с MPAndroidChart. Cначала принимаю данные в bundle в котором есть 2 разных листа потом делаю запросы на сервер получаю данные и передам их в адаптер. Потом должны вывестись две отдельных диаграммы - вместо этого программа их объединяет.
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
public class OnlineAuctionFragment extends Fragment {
    RecyclerView recyclerView;
    OnlineAdapter onlineAdapter;
    Spinner spinner;
    ProgressBar progressBar;
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.online_auction2, container, false);
    }
 
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_onlineauction2);
 
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
 
        recyclerView.removeView(view);
 
        progressBar = (ProgressBar) getActivity().findViewById(R.id.mainprogressBar);
        progressBar.setVisibility(View.INVISIBLE);
 
        onlineAdapter = new OnlineAdapter(getContext());
        recyclerView.setAdapter(onlineAdapter);
 
        Bundle mBundle = this.getArguments();
        ArrayList<String> data = new ArrayList<>();
 
        if (mBundle != null) {
            data = mBundle.getStringArrayList("data");
        }
        if (data.size() != 0) {
            for (int i = 0; i < data.size(); i++) {
                String message = data.get(i);
                new OnlineAdapter(data);
                requestToServer(message);
            }
        }
    }
 
    private void requestToServer(final String data) {
 
                TestInterface testInterface = ApiClientTest.getClient().create(TestInterface.class);
                Call<MessageOfArrayOfPriceOffermW4_P7aJm> call = testInterface.getMessage(data);
                call.enqueue(new Callback<MessageOfArrayOfPriceOffermW4_P7aJm>() {
                    @Override
                        public void onResponse(Call<MessageOfArrayOfPriceOffermW4_P7aJm> call, Response<MessageOfArrayOfPriceOffermW4_P7aJm> response) {
                        try {
                            List<PriceOffer> arrayList = response.body().dataTest.getPriceOfferList();
                            onlineAdapter.setData(arrayList);
                        }catch (NullPointerException e){
                            e.getMessage();
                        }
                    }
 
                    @Override
                    public void onFailure(Call<MessageOfArrayOfPriceOffermW4_P7aJm> call, Throwable t) {
                        Log.d("TAG", "FAIL: ");
                        t.printStackTrace();
                    }
                });
    }
}
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
public class OnlineAdapter extends RecyclerView.Adapter<OnlineAdapter.RowsViewHolder> {
 
    private List<PriceOffer> currentList = new ArrayList<>();
 
    public static ArrayList<String> data = new ArrayList<>();
    Context context;
    int count = 0;
 
    public static class RowsViewHolder extends RecyclerView.ViewHolder {
        LinearLayout linearLayout;
        HorizontalBarChart barChart;
 
        public RowsViewHolder(View itemView) {
            super(itemView);
            linearLayout = (LinearLayout) itemView.findViewById(R.id.onlineauctionadapter_layout);
            barChart = (HorizontalBarChart) itemView.findViewById(R.id.barchart);
 
        }
    }
 
    public OnlineAdapter(Context context) {
        this.context = context;
    }
 
    public OnlineAdapter(ArrayList<String> list) {
        this.data = list;
    }
 
    public void setData(List<PriceOffer> data) {
        currentList.clear();
//        currentList.size();
        currentList.addAll(data);
        Log.d("SET DATA ", String.valueOf(currentList.size()));
        notifyDataSetChanged();
    }
 
    @Override
    public OnlineAdapter.RowsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.onlineauction_adapter, parent, false);
        return new RowsViewHolder(view);
    }
 
    @Override
    public void onBindViewHolder(RowsViewHolder holder, int position) {
 
        List<BarEntry> entries = new ArrayList<>();
        ArrayList<String> list = new ArrayList<>();
 
        if (position == 0) {
            for (int i = 0; i < currentList.size(); i++) {
                BarEntry barEntry = new BarEntry(currentList.get(i).getLotPriceOffer(), i);
                entries.add(barEntry);
                list.add(currentList.get(i).getFirmName());
            }
            BarDataSet dataSet = new BarDataSet(entries, data.toString());
            BarData barData = new BarData(list, dataSet);
 
            dataSet.setColors(new int[]{Color.argb(42, 92, 92, 98)});
            barData.setValueTextSize(10f);
            holder.barChart.setData(barData);
            holder.barChart.animateY(5000);
            holder.barChart.setDrawBarShadow(false);
            holder.barChart.setDrawValueAboveBar(false);
 
            holder.barChart.setDrawGridBackground(false);
            holder.barChart.setDescription("");
            holder.barChart.setNoDataText("");
            holder.barChart.setNoDataTextDescription("");
            holder.barChart.getAxisLeft().setDrawLabels(false);
//        barChart.getLegend().setEnabled(false);
            holder.barChart.getAxisRight().setDrawLabels(false);
            holder.barChart.setDescriptionTextSize(12);
        }
        holder.barChart.notifyDataSetChanged();
        holder.barChart.invalidate();
 
    }
 
    @Override
    public int getItemCount() {
        return currentList.size();
    }
}
Добавлено через 2 часа 8 минут
Как сделать чтобы на каждый лист создал новую диаграмму?
Ответ:
Сообщение от demixdn
как вы хотите чтоб у вас выводились графики? и какие у вас данные?
у меня есть вот такой экран. Первая картинка
каждая карта отдельный лист в котором есть данные. Например: выбрать 2 карты то должен выходить 2 диаграммы если выбрать 3 то 3 диаграммы. Проблема в том что в методе onBindViewHolder объединяет два диаграммы. Вторая картинка. Если выбрать одного то выходит нормально.