Android Lollipop'ta birincil ve vurgu rengini programlı olarak nasıl değiştirebilirim?


156

Her şeyden önce, bu soru çok benzer bir soru soruyor. Ancak sorumun ince bir farkı var.

Bilmek istediğim colorPrimary, bir temanın niteliğini keyfi bir renge programlı olarak değiştirmenin mümkün olup olmadığıdır ?

Yani, örneğin:

<style name="AppTheme" parent="android:Theme.Material.Light">
    <item name="android:colorPrimary">#ff0000</item>
    <item name="android:colorAccent">#ff0000</item>
</style>

Çalışma zamanında kullanıcı #ccffffana renk olarak kullanmak istediğine karar verir . Tabii ki olası tüm renkler için tema oluşturmam mümkün değil.

Herkese açık SDK'yı kullanarak çalıştığı sürece Android'in özel dahili cihazlarına güvenmek gibi hileli şeyler yapmak zorunda olup olmadığım umrumda değil.

Amacım sonunda ActionBar ve gibi tüm widget'ları CheckBoxbu birincil rengi kullanmaktır.


1
Mevcut olmayan bir Android sürümü için "Android'in özel dahili" lerinin ne olduğu hakkında hiçbir fikriniz yok. L'nin "özel içselleri" nin, bir üretim sürümü açısından L'ye dönüştüğü şeyle aynı olduğunu varsaymayın.
CommonsWare

Hayır, bir temaya rastgele veriler yerleştiremezsiniz. Bununla birlikte, colorPrimary yalnızca eylem çubuğu arka planı, son satır çubuğu rengi ve bildirimler rengi için kullanılır ve bunların tümünü dinamik olarak değiştirebilirsiniz.
alanv

2
Bence "Çalışma zamanında stil özniteliği nasıl değiştirilir" sorusunu sormalısınız ve cevabını gördüğümden yapamazsınız. Ancak size yardımcı olabilecek bir fikrim var. Özel ContextWrapper kullanın ve kendi Kaynaklarınızı sağlayın. Şuna bakın: github.com/negusoft/holoaccent/blob/master/HoloAccent/src/com/… Genel olarak bu proje size bunu nasıl yapacağınız hakkında bir fikir verebilir.
Mikooos

1
Sadece burada beyin fırtınası, ancak tüm XML java nesneleri olarak android uygulamanıza yüklenen .dex dosyalarına dönüştürülür. Bu, tüm temaları koddan oluşturabilmemiz ve ayarlayabilmemiz ve aynı zamanda henüz yazılacak bir fabrikadan tema oluşturmamız gerektiği anlamına gelmiyor mu? Uğraştıracağa benziyor.
G_V

1
@NiekHaarman hiç bir yol buldunuz mu?
gbhall

Yanıtlar:


187

Temalar değişmez, yapamazsınız.


8
Teşekkürler Chris! Aradığım cevap değil, ama sanırım onunla yaşamak zorundayım :)
nhaarman

5
Merhaba @Chris Banes, ancak kişi uygulaması durum çubuğu rengini ve araç çubuğu rengini kişinin tema rengine göre nasıl değiştirdi? Mümkünse, Niek Haarman'ın ihtiyacı olanın çok uzak olmadığını düşünüyorum çünkü sadece kullanıcının istediği renk kodunu saklaması gerekiyor. Bununla ilgili daha fazla bilgi verebilir misiniz? Ben de böyle bir şey yaratmak istiyorum ama gerçekten kafam karıştı.
Swan

40
Durum Çubuğu rengi, Window.setStatusBarColor () aracılığıyla dinamik olarak değiştirilebilir.
Chris Banes

9
Programlı bir tema oluşturmak mümkün mü?
Andrew Orobator

3
Durum çubuğu rengini dinamik olarak değiştirirken, gezinme çubuğu rengini Window.setNavigationBarColor () - API 21 :)
user802421 ile 30:15

65

Kişiler uygulamasıyla ilgili yorumları ve her kişi için bir temayı nasıl kullandığını okudum.

Muhtemelen, kişiler uygulamasının bazı önceden tanımlanmış temaları vardır (her malzeme ana rengi için: http://www.google.com/design/spec/style/color.html ).

Bir temayı onCreate yönteminin içinde bir setContentView yönteminden önce uygulayabilirsiniz.

Daha sonra kişiler uygulaması her kullanıcıya rastgele bir tema uygulayabilir.

Bu yöntem:

setTheme(R.style.MyRandomTheme);

Ancak bu yöntemin bir sorunu vardır, örneğin araç çubuğu rengini, kaydırma efekti rengini, dalgalanma rengini vb. Değiştirebilir, ancak durum çubuğu rengini ve gezinme çubuğu rengini değiştiremez (eğer değiştirmek isterseniz).

Daha sonra bu sorunu çözmek için önce yöntemi kullanabilirsiniz:

if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.md_red_500));
        getWindow().setStatusBarColor(getResources().getColor(R.color.md_red_700));
    }

Bu iki yöntem gezinme ve durum çubuğu rengini değiştirir. Gezinme çubuğunuzu yarı saydam olarak ayarlarsanız rengini değiştiremeyeceğinizi unutmayın.

Bu son kod olmalıdır:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.MyRandomTheme);
    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.myrandomcolor1));
        getWindow().setStatusBarColor(getResources().getColor(R.color.myrandomcolor2));
    }
    setContentView(R.layout.activity_main);

}

Bir anahtar kullanabilir ve rastgele temalar kullanmak için rastgele numara oluşturabilirsiniz veya kişiler uygulamasında olduğu gibi her kişinin muhtemelen önceden tanımlanmış bir numarası vardır.

Bir tema örneği:

<style name="MyRandomTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/myrandomcolor1</item>
    <item name="colorPrimaryDark">@color/myrandomcolor2</item>
    <item name="android:navigationBarColor">@color/myrandomcolor1</item>
</style>

İngilizcem için üzgünüm.


1
Cevabınız için teşekkür ederim. Maalesef, isteğim keyfi bir renk kullanmaktı . Tabii ki tüm renkler için temalar oluşturmak mümkün değildir.
nhaarman

1
@DanielGomezRico - AFAIK, başlangıçta nerede ayarlandığından bağımsız olarak önceden belirlenmiş temayı geçersiz kılabilirsiniz - yeterince erken yaptığınız sürece. Yanıtın dediği gibi "onCreate yönteminin içinde setContentView yönteminden önce bir tema uygulayabilirsiniz."
ToolmakerSteve

50

Temanızı, başka bir stil uygulayarak çalışma zamanında değiştirmek için Theme.applyStyle öğesini kullanabilirsiniz .

Diyelim ki şu stil tanımlarına sahipsiniz:

<style name="DefaultTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/md_lime_500</item>
    <item name="colorPrimaryDark">@color/md_lime_700</item>
    <item name="colorAccent">@color/md_amber_A400</item>
</style>

<style name="OverlayPrimaryColorRed">
    <item name="colorPrimary">@color/md_red_500</item>
    <item name="colorPrimaryDark">@color/md_red_700</item>
</style>

<style name="OverlayPrimaryColorGreen">
    <item name="colorPrimary">@color/md_green_500</item>
    <item name="colorPrimaryDark">@color/md_green_700</item>
</style>

<style name="OverlayPrimaryColorBlue">
    <item name="colorPrimary">@color/md_blue_500</item>
    <item name="colorPrimaryDark">@color/md_blue_700</item>
</style>

Artık temanızı çalışma zamanında şu şekilde yamalayabilirsiniz:

getTheme().applyStyle(R.style.OverlayPrimaryColorGreen, true);

Yerleşim applyStyledüzeni şişirilmeden önce çağrılmalıdır! Bu nedenle, görünümü manuel olarak yüklemediğiniz sürece setContentViewetkinliğinizi çağırmadan önce temaya stiller uygulamanız gerekir .

Tabii ki bu keyfi bir renk, yani 16 milyon (256 3 ) renkten birini belirtmek için kullanılamaz . Ancak sizin için stil tanımlarını ve Java kodunu üreten küçük bir program yazarsanız, 512'den biri gibi bir şey (8 3 ) mümkün olmalıdır.

Bunu ilginç kılan şey, temanızın farklı yönleri için farklı stil bindirmeleri kullanabilmenizdir. colorAccentÖrneğin , birkaç kaplama tanımı ekleyin . Artık birincil renk ve vurgu rengi için farklı değerleri neredeyse keyfi olarak birleştirebilirsiniz.

Yer paylaşımlı tema tanımlarınızın yanlışlıkla bir grup stil tanımını bir üst stil tanımından miras almadığından emin olmalısınız. Örneğin, AppTheme.OverlayRedörtülü olarak adlandırılan bir stil, tanımlanan tüm stilleri miras alır AppThemeve ana temayı eklediğinizde bu tanımların tümü de uygulanır. Öyleyse yer paylaşımı tema adlarındaki noktalardan kaçının veya boş bir stil olarak Overlay.Redtanımlayın ve tanımlayın Overlay.


11
Aktivitenizi aramadan applyStyleönce aramayı deneyin setContentView, bu durumda çalışmalıdır.
devconsole

1
evet okai, o zaman işe yarayabilir! Ben aktivite değil fragman niveau renk değiştirmek için bir yol arıyorum! Bu yüzden benim için ne yazık ki işe yaramadı: <Kullanım durumum, farklı bir parça başlatacak sekmelerden geçiş yaparken FAB veya sekme göstergeleri için farklı renkler istiyorum!
Dennis Anderson

Teşekkürler bu çok yardımcı oldu! Ancak, bunu birkaç kez yapamıyorum. (bir tanesi colorPrimary, biri colorAccent için, vb.). Bana yardım eder misin? Teşekkürler. stackoverflow.com/questions/41779821/…
Thomas Vos

1
Bu, bir kez daha + 1'lemek için ikinci bir hesap kullanmak istediğim türden bir cevap. Teşekkürler.
Benoit Duffez

Çok teşekkür ederim, aradığım şey buydu .... Umarım bu yaklaşımı kullanarak mevcut temanın Accent rengini değiştirebilirim.
Nasib

32

Herhangi bir renk teması yapmak için bir çözüm oluşturdum, belki bu biri için yararlı olabilir. API 9+

1. önce " res / değerleri-v9 / " oluşturun ve oraya bu dosyayı koyun: styles.xml ve stillerinizle birlikte normal "res / değerleri" klasörü kullanılacaktır.

2. bu kodu res / değerleri / styles.xml dosyasına koyun:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#000</item>
        <item name="colorPrimaryDark">#000</item>
        <item name="colorAccent">#000</item>
        <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    </style>

    <style name="AppThemeDarkActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">#000</item>
        <item name="colorPrimaryDark">#000</item>
        <item name="colorAccent">#000</item>
        <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    </style>

    <style name="WindowAnimationTransition">
        <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>
</resources>

Android in 3. içinde

<application android:theme="@style/AppThemeDarkActionBar">

4. "ThemeColors.java" adıyla yeni bir sınıf oluşturun

public class ThemeColors {

    private static final String NAME = "ThemeColors", KEY = "color";

    @ColorInt
    public int color;

    public ThemeColors(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(NAME, Context.MODE_PRIVATE);
        String stringColor = sharedPreferences.getString(KEY, "004bff");
        color = Color.parseColor("#" + stringColor);

        if (isLightActionBar()) context.setTheme(R.style.AppTheme);
        context.setTheme(context.getResources().getIdentifier("T_" + stringColor, "style", context.getPackageName()));
    }

    public static void setNewThemeColor(Activity activity, int red, int green, int blue) {
        int colorStep = 15;
        red = Math.round(red / colorStep) * colorStep;
        green = Math.round(green / colorStep) * colorStep;
        blue = Math.round(blue / colorStep) * colorStep;

        String stringColor = Integer.toHexString(Color.rgb(red, green, blue)).substring(2);
        SharedPreferences.Editor editor = activity.getSharedPreferences(NAME, Context.MODE_PRIVATE).edit();
        editor.putString(KEY, stringColor);
        editor.apply();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) activity.recreate();
        else {
            Intent i = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName());
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            activity.startActivity(i);
        }
    }

    private boolean isLightActionBar() {// Checking if title text color will be black
        int rgb = (Color.red(color) + Color.green(color) + Color.blue(color)) / 3;
        return rgb > 210;
    }
}

5. MainActivity:

public class MainActivity extends AppCompatActivity {

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

    public void buttonClick(View view){
        int red= new Random().nextInt(255);
        int green= new Random().nextInt(255);
        int blue= new Random().nextInt(255);
        ThemeColors.setNewThemeColor(MainActivity.this, red, green, blue);
    }
}

Rengi değiştirmek için Rastgele'yi RGB'nizle değiştirin, umarım bu yardımcı olur.

resim açıklamasını buraya girin

Tam bir örnek var: ColorTest.zip


projeyi böyle paylaşabilir misin?
Erselan Han

Yeni bir proje oluşturun, dosyayı indirin - "styles.xml" ve yukarıdaki kodu kullanın. İyi şanslar.
IQ. Özelliği

1
Başımı etrafa context.setTheme(context.getResources().getIdentifier("T_" + stringColor, "style", context.getPackageName()));doyamıyorum, bana bu konuyu takip etmek için bir açıklama veya bağlantı verebilir misin?
Langusten Gustel

1
@ IQ.feature Kodunuzu Github repo'ya aktarmanın kod paylaşımı için daha uygun olduğunu düşünüyorum
Vadim Kotov

1
Sadece diğerleri için açık olmak için çünkü ben düştü ... orada res-v9 / styles.xml farklı renkler ile temaların bir listesini bildiren ve kod aslında bu temalardan birini uygular ve etkinliği yeniden oluşturur. Diğer yanıtların da elde etmeye çalıştığı şey budur. Yani temaları önceden tanımlayarak programsal veya dinamik olarak tema oluşturmadığı bir çözümdür.
frezq

3

Dahnark'ın kodunu kullandım ama Araç Çubuğu arka planını da değiştirmem gerekiyor:

if (dark_ui) {
    this.setTheme(R.style.Theme_Dark);

    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.Theme_Dark_primary));
        getWindow().setStatusBarColor(getResources().getColor(R.color.Theme_Dark_primary_dark));
    }
} else {
    this.setTheme(R.style.Theme_Light);
}

setContentView(R.layout.activity_main);

toolbar = (Toolbar) findViewById(R.id.app_bar);

if(dark_ui) {
    toolbar.setBackgroundColor(getResources().getColor(R.color.Theme_Dark_primary));
}

bu kodu ekleyin: android: background = "? attr / colorPrimary", araç çubuğunuza (.xml dosyasında), bu nedenle java'da arka plan ayarlamanıza gerek yoktur.
JavierSegoviaCordoba

Ama iki farklı Araç Çubuğum var, biri açık bir tema için diğeri karanlık bir tema için. Ben android eklerseniz: background = "? Attr / colorPrimary" Bir çeşit seçici kullanmak zorundayım.
lgallard

Çok fazla temam vardı ve sadece bu kodu kullanıyorum. Bu uygulamaya bir göz atın: play.google.com/store/apps/…
JavierSegoviaCordoba

-1

ColorPrimary rengini değiştiremezsiniz, ancak farklı bir renkle yeni bir stil ekleyerek uygulamanızın temasını değiştirebilirsiniz.

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

<style name="AppTheme.NewTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorOne</item>
    <item name="colorPrimaryDark">@color/colorOneDark</item>
</style>

ve etkinlik kümesi temasının içinde

 setTheme(R.style.AppTheme_NewTheme);
 setContentView(R.layout.activity_main);

Anahtarlama stillerini açıklayan daha önce cevaplar olduğunu görüyorum. Hangi durumda cevabınız bunlardan daha uygun? Ve açık olmak gerekirse, soru, "Çalışma zamanında, kullanıcı #ccffff'yi birincil renk olarak kullanmak istediğine karar verir. Elbette tüm olası renkler için temalar oluşturabilmem mümkün değil." Bu, bu ihtiyacı çözmez; ancak hiç kimse bunun nasıl yapılacağını tarif etmemiş olsaydı bilmek faydalı olacaktır.
ToolmakerSteve

-2

yapabileceğiniz bir etkinlikten:

getWindow().setStatusBarColor(i color);

2
Komik bu cevap -8 oy var ama benim sorunum çözer: D
Nabin Bhandari

-4

BİR TAKIM KULLANIN

Özel bir araç çubuğu sınıfı oluşturarak, özel bir araç çubuğu öğesi rengini dinamik olarak ayarlayabilirsiniz :

package view;

import android.app.Activity;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.support.v7.internal.view.menu.ActionMenuItemView;
import android.support.v7.widget.ActionMenuView;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomToolbar extends Toolbar{

    public CustomToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        ctxt = context;
    }

    int itemColor;
    Context ctxt;

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        Log.d("LL", "onLayout");
        super.onLayout(changed, l, t, r, b);
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    } 

    public void setItemColor(int color){
        itemColor = color;
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    }



    /**
     * Use this method to colorize toolbar icons to the desired target color
     * @param toolbarView toolbar view being colored
     * @param toolbarIconsColor the target color of toolbar icons
     * @param activity reference to activity needed to register observers
     */
    public static void colorizeToolbar(Toolbar toolbarView, int toolbarIconsColor, Activity activity) {
        final PorterDuffColorFilter colorFilter
                = new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.SRC_IN);

        for(int i = 0; i < toolbarView.getChildCount(); i++) {
            final View v = toolbarView.getChildAt(i);

            doColorizing(v, colorFilter, toolbarIconsColor);
        }

      //Step 3: Changing the color of title and subtitle.
        toolbarView.setTitleTextColor(toolbarIconsColor);
        toolbarView.setSubtitleTextColor(toolbarIconsColor);
    }

    public static void doColorizing(View v, final ColorFilter colorFilter, int toolbarIconsColor){
        if(v instanceof ImageButton) {
            ((ImageButton)v).getDrawable().setAlpha(255);
            ((ImageButton)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof ImageView) {
            ((ImageView)v).getDrawable().setAlpha(255);
            ((ImageView)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof AutoCompleteTextView) {
            ((AutoCompleteTextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof TextView) {
            ((TextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof EditText) {
            ((EditText)v).setTextColor(toolbarIconsColor);
        }

        if (v instanceof ViewGroup){
            for (int lli =0; lli< ((ViewGroup)v).getChildCount(); lli ++){
                doColorizing(((ViewGroup)v).getChildAt(lli), colorFilter, toolbarIconsColor);
            }
        }

        if(v instanceof ActionMenuView) {
            for(int j = 0; j < ((ActionMenuView)v).getChildCount(); j++) {

                //Step 2: Changing the color of any ActionMenuViews - icons that
                //are not back button, nor text, nor overflow menu icon.
                final View innerView = ((ActionMenuView)v).getChildAt(j);

                if(innerView instanceof ActionMenuItemView) {
                    int drawablesCount = ((ActionMenuItemView)innerView).getCompoundDrawables().length;
                    for(int k = 0; k < drawablesCount; k++) {
                        if(((ActionMenuItemView)innerView).getCompoundDrawables()[k] != null) {
                            final int finalK = k;

                            //Important to set the color filter in seperate thread, 
                            //by adding it to the message queue
                            //Won't work otherwise. 
                            //Works fine for my case but needs more testing

                            ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);

//                              innerView.post(new Runnable() {
//                                  @Override
//                                  public void run() {
//                                      ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);
//                                  }
//                              });
                        }
                    }
                }
            }
        }
    }



}

ardından düzen dosyanızdan bakın. Şimdi kullanarak özel bir renk ayarlayabilirsiniz

toolbar.setItemColor(Color.Red);

Kaynaklar:

Bunu yapmak için bilgileri burada buldum: Android Araç Çubuğu simgeleri rengini dinamik olarak değiştirme

ve sonra düzenledim, geliştirdim ve buraya gönderdim: GitHub: AndroidDynamicToolbarItemColor


Bu soruya cevap vermiyor. Özellikle "Amacım sonunda ActionBar'a ve CheckBox gibi tüm widget'lara bu birincil rengi kullanmak. "
nhaarman

Sonra bir onay kutusu eklemek için ekleyin. Örneğin, if (v instanceof CheckBox) {themeChexnoxWithColor (toolbarIconsColor); Bunun sorunuzu dürüstçe nasıl yanıtlamadığını görmüyorum
Michael Kern

@ nhaarman dinamik olarak bu stackoverflow.com/questions/23708637/change-actionbar-background-color-dynamically rengini ayarlayabilirsiniz Sorunuzu tam olarak anlamıyorum
Michael Kern

Kullanıcının işlem çubuğu rengini ve işlem çubuğu öğe renklerini seçebileceği bir uygulamam var. Başka neye ihtiyacın olduğunu göremiyorum
Michael Kern

2
Bu bana çok yardımcı oldu.
Firefly

-6

Yapabilecekleriniz:

çizilebilir klasöre bir dosya yazın, hadi background.xml adını verelim

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="?attr/colorPrimary"/>
</shape>

ardından Düzeninizi ayarlayın (veya durum ne olursa olsun) android:background="@drawable/background"

temanızı ayarladığınızda bu renk aynı şeyi temsil eder.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.