Ответы пользователя по тегу Java
  • Как сделать, что бы при нажатии на кнопку назад приложение не сворачивалось?

    a13xsus
    @a13xsus
    Lazy developer
    Смотрим, есть ли фрагменты в стаке, если нет, то разрешаем дефолтный обработчик. Если есть — отображаем фрагмент из стака до тех пор, пока очередь не закончится. Само собой, транзакция FragmentTransaction должна быть с addToBackStack перед коммитом.

    @Override
    public void onBackPressed() {
    
        int count = getFragmentManager().getBackStackEntryCount();
    
        if (count == 0) {
            super.onBackPressed();
        } 
        else {
            getFragmentManager().popBackStack();
        }
    
    }
    Ответ написан
    1 комментарий
  • Не могу изменить цвет надписи на тулбаре?

    a13xsus
    @a13xsus
    Lazy developer
    toolbar.setTitleTextColor(0xFFFFFFFF);

    или

    toolbar.setTitleTextColor(android.graphics.Color.WHITE);


    или через styles.xml добавляете итем в стиль для AppCompat

    <item name="android:textColorPrimary">TITLE_COLOR_GOES_HERE</item>


    или добавьте в xml в тег toolbar'a

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/oolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>


    Будет работать для API > 21 либо если используете AppCompat библиотеки.
    Ответ написан
    2 комментария
  • DrawerLayout - Fragment || Activity?

    a13xsus
    @a13xsus
    Lazy developer
    А сами как думаете? Конечно с фрагментами обычно делают.
    Ответ написан
  • В чем может быть проблема с темой в android?

    a13xsus
    @a13xsus
    Lazy developer
    colorAccent, colorPrimary, colorPrimaryDark -- это опции AppCompat темы для андроид 5 и выше, либо для младших версий с использованием support library v7.

    Подключаете суппорт либы, в values\styles.xml пишете что-то типа:

    <style name="MyTheme" parent="MyTheme.Base">
    
     </style>
      <!-- Base theme applied no matter what API -->
      <style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette-->
        <!-- colorPrimary is used for the default action bar background -->
        <item name="colorPrimary">@color/primary</item>
        <!-- colorPrimaryDark is used for the status bar -->
        <item name="colorPrimaryDark">@color/primaryDark</item>
        <!-- colorAccent is used as the default value for colorControlActivated
             which is used to tint widgets -->
        <item name="colorAccent">@color/accent</item>
         <!-- You can also set colorControlNormal, colorControlActivated
             colorControlHighlight and colorSwitchThumbNormal. -->
      </style>


    а в values\colors.xml уже определяете цвета:

    <?xml version="1.0" encoding="UTF-8" ?>
    <resources>	
    	<color name="primary">#607D8B</color>
    	<color name="primaryDark">#455A64</color>
    	<color name="accent">#FE4564</color>   
    </resources>


    И разумеется наследуем активити от AppCompatActivity

    public class MainActivity extends AppCompatActivity {
      // ...
    }


    И в манифесте указываем использовать тему. В моем примере это MyTheme.

    <application android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:theme="@style/MyTheme"></application>
    Ответ написан
  • Как переключаться между акстивити с уничтожением первого?

    a13xsus
    @a13xsus
    Lazy developer
    startActivity(intent);
    finish();


    либо в зависимости от желаемой навигации использовать флаги, например FLAG_ACTIVITY_CLEAR_TOP

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);


    Подробнее здесь https://developer.android.com/guide/components/tas...
    Ответ написан
    Комментировать
  • Как в navigationView запретить изменение цвета текста для отдельных menu item?

    a13xsus
    @a13xsus Автор вопроса
    Lazy developer
    Вижу как вариант — в navigationView.NavigationItemSelected() принудительно писать navigationView.Menu.FindItem(Resource.Id.nav_switch).SetChecked(false);

    В принципе так нормально, но не костыль ли это?
    Ответ написан
    Комментировать
  • Как получить доступ к текстовым полям в шапке боковой панели?

    a13xsus
    @a13xsus
    Lazy developer
    Нужно сначала получить navigationView.GetHeaderView. Затем в хедере искать этот TextView. На Java перепишите, приведу пример с С#:
    NavigationView navigationView:
    navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
                View header = navigationView.GetHeaderView(0);
                TextView navheader_text = header.FindViewById<TextView>(Resource.Id.navheader_text);
                navheader_text.Text = "New text";


    stackoverflow.com/questions/33999407/how-to-set-te...
    Ответ написан
    Комментировать
  • Как работает умножение деление для переменной типа инт?

    a13xsus
    @a13xsus
    Lazy developer
    int не может содержать числа с плавающей точкой. Поэтому при операциях с типом int дробная часть просто отбрасывается, даже не округляется. Поэтому в ответе получается 100 - 0 * 100 = 100.
    Ответ написан
  • Как сделать такую же кнопку в своем дизайне?

    a13xsus
    @a13xsus
    Lazy developer
    Это Floating Action Button. Да, вы можете обернуть свой xml в CoordinatorLayout и вместе с ним использовать кнопку. Делается достаточно легко с помощью support library. Достаточно понятно описано здесь:
    stackoverflow.com/questions/24459352/how-can-i-add...

    Подробнее:

    1. Подключаем support library к проекту. Я разрабатываю в xamarin, но в андроид студии к gradle нужно добавить что-то вроде: compile 'com.android.support:design:23.1.1'

    2. Оборачиваем весь ваш xml таким образом:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#cccccc"
        android:id="@+id/rel_layout">
    
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:scaleType="centerCrop"
    
            android:id="@+id/tv_movie_item_img360"
            android:transitionName="selectedMovie"/>
    
        <View
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:background="#000000"
            android:alpha="0.3" />
    
        <com.makeramen.roundedimageview.RoundedImageView
            android:layout_width="100dp"
            android:layout_height="130dp"
    
            android:scaleType="centerCrop"
            app:riv_border_width="2dip"
            app:riv_border_color="#ffffff"
            android:layout_marginStart="14dp"
            android:id="@+id/tv_movie_item_img"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="240dp" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="The Revenant"
            android:id="@+id/tv_movie_item_nameRU"
            android:singleLine="true"
            android:layout_marginLeft="10dp"
            android:textSize="20sp"
            android:textColor="#ffffff"
            android:layout_alignBottom="@+id/tv_movie_item_img360"
            android:layout_toEndOf="@+id/tv_movie_item_img"
            android:layout_marginBottom="10dp" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="&quot;While exploring the uncharted wilderness in 1823, frontiersman Hugh Glass (Leonardo DiCaprio) sustains life-threatening injuries from a brutal bear attack."
            android:id="@+id/tv_movie_item_details"
            android:layout_marginLeft="10dp"
            android:paddingRight="10dp"
            android:textSize="12sp"
            android:layout_marginTop="5dp"
            android:layout_below="@+id/tv_movie_item_img360"
            android:layout_toEndOf="@+id/tv_movie_item_img" />
    
        <ExpandableListView
            android:id="@+id/exListView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_below="@+id/tv_movie_item_details"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true">
        </ExpandableListView>
    
    </RelativeLayout>
        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:clickable="true"
            android:src="@drawable/ic_forum"
            app:layout_anchor="@id/tv_movie_item_img360"
            app:layout_anchorGravity="bottom|right|end" />
    </android.support.design.widget.CoordinatorLayout>


    app:layout_anchor="@id/tv_movie_item_img360" -- здесь указываем view, к которому нужно пристыковаться кнопке (снизу)

    С вашим layout у меня получилось как-то так. Разумеется это без кода, в коде нужно будет добавить слушателя, чтобы обрабатывать клики:

    FloatingActionButton myFab = (FloatingActionButton) myView.findViewById(R.id.fab); 
    myFab.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
            doMyThing(); 
        } 
    });
    Ответ написан
    8 комментариев
  • Как вызываются методы в классах?

    a13xsus
    @a13xsus
    Lazy developer
    public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_open:
                    openFile(FILENAME);
                    return true;
                case R.id.action_save:
                    saveFile(FILENAME);
                    return true;
                default:
                    return true;
            }
    }


    https://developer.android.com/guide/topics/ui/menu...

    Когда пользователь выбирает пункт меню параметров (в том числе пункты действий из строки действий), система вызывает метод onOptionsItemSelected() вашей операции. Этот метод передает выбранный класс MenuItem. Идентифицировать пункт меню можно, вызвав метод getItemId(), который возвращает уникальный идентификатор пункта меню (определенный атрибутом android:id из ресурса меню или целым числом, переданным методу add()). Этот идентификатор можно сопоставить с известными пунктами меню, чтобы выполнить соответствующее действие.
    Ответ написан
    Комментировать
  • Как сделать множество разноцветных круглых imageview через один dravable xml?

    a13xsus
    @a13xsus
    Lazy developer
    Напишу на C#, на Java, думаю, сами перепишите, там точно так же

    убираем цвет <solid android:color="#FF0000" /> из шейпа.

    в коде меняем через SetColorFilter, он вроде как уже deprecated, но у вас min API 14:

    imgview.Background.SetColorFilter(Resources.GetColor(Resource.Color.blue), PorterDuff.Mode.Add);


    соответственно в Colors.xml нужно определить цвета:

    <?xml version="1.0" encoding="UTF-8" ?>
    <resources>
    	<color name="blue">#0000ff</color>
    </resources>


    Соответственно когда нужно через ClearColorFilter() убираете цвет и меняете на другой.
    Ответ написан
    1 комментарий
  • Как убрать серый background image в Android?

    a13xsus
    @a13xsus
    Lazy developer
    На днях с такой проблемой в Xamarin Studio столкнулся. Решение такое. Поместите ваше изображение в папку drawable-nodpi и обновите ресурсы. Ссылка android:background при этом таковой и должна остаться: @drawable/main_background.

    Связано с тем, что под разные экраны (с разной плотностью пикселей) андроид пытается масштабировать и не всегда получается. Если посмотреть в Application Output во время выполнения приложения, то там будут ошибки типа "Bitmap too large to be uploaded into a texture".
    Ответ написан
    Комментировать