Parçadan Özel ActionBar Başlığını Ayarlama


90

Main'de FragmentActivity, özel ActionBarbaşlığımı şu şekilde kurarım:

    LayoutInflater inflator = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflator.inflate(R.layout.custom_titlebar, null);

    TextView tv = (TextView) v.findViewById(R.id.title);
    Typeface tf = Typeface.createFromAsset(this.getAssets(),
            "fonts/capsuula.ttf");
    tv.setTypeface(tf);
    tv.setText(this.getTitle());

    actionBar.setCustomView(v);

Bu mükemmel çalışıyor. Ancak, diğerini Fragmentsaçtığımda başlığın değişmesini istiyorum. Bunu Activityyapmak için Ana'ya nasıl erişeceğimden emin değilim ? Geçmişte bunu yaptım:

((MainFragmentActivity) getActivity()).getSupportActionBar().setTitle(
            catTitle);

Birisi uygun yöntem konusunda tavsiyede bulunabilir mi?

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:text=""
        android:textColor="#fff"
        android:textSize="25sp" />

</RelativeLayout>

Stackoverflow.com/a/28279341/1651286 , ölçeklenebilirliği nedeniyle kabul edilen yanıt olmalıdır. Diğer tüm yaklaşımlar, ölçeklenebilir bir tasarım olmayan belirli bir etkinliğe parçalara bağlı hale getirdiği için, ya aynı parçanın birden çok etkinlikle kullanılması gerekiyorsa, bu aynı zamanda android çerçevesinin de önerdiği şeydir.
Akhil Dad

Yanıtlar:


98

=== Güncellemesi 30 Ekim 2019 ===

ViewModel ve LiveData gibi yeni bileşenlere sahip olduğumuz için, ViewModel ve Live Data kullanarak Etkinlik Başlığını Fragment'ten güncellemenin farklı / daha kolay bir yoluna sahip olabiliriz.

Aktivite

class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    if (savedInstanceState == null) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.container, MainFragment.newInstance())
            .commitNow()
    }
    viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
    viewModel.title.observe(this, Observer {
        supportActionBar?.title = it
    })
} }

MainFragment

class MainFragment : Fragment() {
companion object {
    fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View {
    return inflater.inflate(R.layout.main_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    activity?.run {
        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
    } ?: throw Throwable("invalid activity")
    viewModel.updateActionBarTitle("Custom Title From Fragment")
} }

Ve MainModelView:

class MainViewModel : ViewModel() {
private val _title = MutableLiveData<String>()
val title: LiveData<String>
get() = _title
fun updateActionBarTitle(title: String) = _title.postValue(title) }

Ardından, Parçadaki Etkinlik başlığını kullanarak güncelleyebilirsiniz. viewModel.updateActionBarTitle("Custom Title From Fragment")

=== Güncelleme 10 Nisan 2015 ===

İşlem çubuğu başlığınızı güncellemek için dinleyiciyi kullanmalısınız

Parça:

public class UpdateActionBarTitleFragment extends Fragment {
    private OnFragmentInteractionListener mListener;

    public UpdateActionBarTitleFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if (mListener != null) {
            mListener.onFragmentInteraction("Custom Title");
        }
        return inflater.inflate(R.layout.fragment_update_action_bar_title2, container, false);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(String title);
    }
}

Ve Etkinlik:

public class UpdateActionBarTitleActivity extends ActionBarActivity implements UpdateActionBarTitleFragment.OnFragmentInteractionListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_action_bar_title);
    }

    @Override
    public void onFragmentInteraction(String title) {
        getSupportActionBar().setTitle(title);
    }
}

Daha fazlasını buradan okuyun: https://developer.android.com/training/basics/fragments/communicating.html


1
Benim için çalıştı! Bunun yerine sadece getActionBar (). SetTitle (title) kullandım. Teşekkürler
luckyreed76

1
Tam olarak aradığım şey, benim için seçilen cevaptan daha iyi sonuç verdi. Teşekkürler!
dstrube

1
Kabul edilen cevap bu olmalı! Nasıl yapılması gerektiğini doğru bir şekilde gösterir: Bir parça, barındırma etkinliği ile iletişim kurmak istiyorsa, iletişim her zaman bir arayüz aracılığıyla gerçekleşmelidir. Parça arayüzü sağlar ve etkinlik onu uygular! Birden fazla parçanın bir etkinlikle aynı şekilde iletişim kurması gerekiyorsa, arayüzü sağlayan soyut bir parça yazın ve ardından her parçanın bu "temel parçadan" miras almasına izin verin.
winklerrr

3
Bu arada: Bu yanıtta kullanılan onAttach (Activity) yöntemi bu zamana kadar kullanımdan kaldırılmıştır. onAttach(Context)Yöntemin içinde, geçirilen ana bilgisayar etkinliğinin gerekli arabirimi uygulayıp uygulamadığını kontrol edin (ana bilgisayar etkinliğini aracılığıyla alın context.getActivity()).
winklerrr

2
Yıllar sonra bunu kabul edilen cevaba dönüştürdüm çünkü bildiğimiz gibi arayüzler, parçaların ve etkinliklerin iletişim kurması gereken yol.
TheLettuceMaster

150

Yaptığın şey doğru. API'lere Fragmentserişiminiz yok ActionBar, bu yüzden aramanız gerekiyor getActivity. Sizin Fragmentstatik bir iç sınıf olmadığı sürece , bu durumda WeakReferenceebeveyn için bir oluşturmalı ve Activity'i çağırmalısınız. getActionBarBuradan.

ActionBarÖzel bir düzen kullanırken başlığınızı ayarlamak için , Fragmentaramanız gerekir getActivity().setTitle(YOUR_TITLE).

Aradığınızda sebebi setTitlearadığınız çünkü getTitle, aramalarınızdan başlık olarak ActionBar. getTitlebunun için başlığı döndürür Activity.

Aramayı almak istemiyorsanız getTitle, o zaman genel bir yöntem oluşturmanız gerekir o setleri sizin metin TextViewiçinde Activityolduğu ana Fragment.

Etkinliğinizde :

public void setActionBarTitle(String title){
    YOUR_CUSTOM_ACTION_BAR_TITLE.setText(title);
}

Parçanızda :

((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);

Dokümanlar:

Activity.getTitle

Activity.setTitle

Ayrıca, this.whateversağladığınız kodu aramanıza gerek yoktur , sadece bir ipucu.


Deniyorum ve çalışmasını sağlayamıyorum. Değeri ne olursa olsun, kendimi postaladım XMLve "bunu" da kaldırdım. Değişiklik yok ... Ve hayır, bu bir staticiç sınıf değil .
TheLettuceMaster

Bekle, ne çalışmıyor? Senin OP size bir şey söz etmeyin değil , sadece başlığı ayarlamak için "doğru" yöntemini bilmek isteyen sayılabilir çalışan ActionBarbir den Fragment. Ayrıca, kaldırmayı this.whateverhiçbir şeye çözüm olarak sunmuyordum, bu yalnızca bir kod biçimlendirme ipucuydu.
adneal

Sanırım neyle sorun yaşadığınızı anladım ve cevabımı buna göre düzenledim.
adneal

Thankx perfect answer
Ammar ali

@KickingLettuce, işe yarayana kadar bu yanıtla bir süre uğraşıyorum (bu yüzden sorunuzu ve sorunuzu artırdım): gezinti çekmecemde ana etkinliğimde ( menu_act) global "mTitle" yaptım ve parça, önce "mTitle" ( ( (menu_act) getActivity() ).mTitle = "new_title") ' e bir başlık atarım ve hemen yaparım ( (menu_act) getActivity() ).restoreActionBar();. "RestoreActionBar ()" içinde "actionBar.setTitle (mTitle);" var.
Jose Manuel Abarca Rodríguez

29

Google örnekleri bunu parçalar içinde kullanma eğilimindedir.

private ActionBar getActionBar() {
    return ((ActionBarActivity) getActivity()).getSupportActionBar();
}

Parça, bir ActionBarActivity'ye ait olacaktır ve bu, eylem çubuğuna yapılan başvurunun bulunduğu yerdir. Bu daha temizdir çünkü parçanın tam olarak hangi etkinlik olduğunu bilmesi gerekmez, yalnızca ActionBarActivity'yi uygulayan bir etkinliğe ait olması gerekir. Bu, parçayı daha esnek hale getirir ve olması gerektiği gibi birden çok etkinliğe eklenebilir.

Şimdi, parçada yapmanız gereken tek şey.

getActionBar().setTitle("Your Title");

Parçalarınızın normal parça sınıfı yerine miras aldığı bir temel parçanız varsa bu iyi çalışır.

public abstract class BaseFragment extends Fragment {
    public ActionBar getActionBar() {
        return ((ActionBarActivity) getActivity()).getSupportActionBar();
    }
}

Sonra parçanda.

public class YourFragment extends BaseFragment {
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getActionBar().setTitle("Your Title");
    }
}

Teşekkürler. çok güzel bir çözüm, bu şekilde işlem çubuğunuza özel görünüm de geçirebilirsiniz.
Amir

Android SDK'daki son güncellemelerle, ActionBarActivity yerine, v7 geriye dönük uyumluluk kitaplığı kullanıyorsanız (muhtemelen yapmanız gereken) AppCompatActivity'ye aşağı yayın yapmak isteyebilirsiniz.
fr4gus

8

ActivityUnvanını bir Fragmentsorumluluk seviyesinden ayarlamak karmaşıktır. Fragmentbir içinde yer alır Activity, bu nedenle Activity, Fragmentörneğin türüne göre kendi başlığını ayarlaması gereken budur .

Bir arayüzünüz olduğunu varsayalım:

interface TopLevelFragment
{
    String getTitle();
}

FragmentEtkileyebilir s Activitybireyin başlığını o zaman bu arabirimini uygular. Barındırma faaliyetindeyken şunları yazarsınız:

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

    FragmentManager fm = getFragmentManager();
    fm.beginTransaction().add(0, new LoginFragment(), "login").commit();
}

@Override
public void onAttachFragment(Fragment fragment)
{
    super.onAttachFragment(fragment);

    if (fragment instanceof TopLevelFragment)
        setTitle(((TopLevelFragment) fragment).getTitle());
}

Bu şekilde Activity, TopLevelFragmentbir tablette oldukça olası olan, birkaç s birleştirilse bile hangi başlığın kullanılacağı her zaman kontrol altındadır.


6

Kabul edilen cevabın bunun için mükemmel bir cevap olduğunu sanmıyorum. Kullanan tüm aktivitelerden beri

Araç çubuğu

kullanılarak genişletilir

AppCompatActivity

ondan çağrılan fragmanlar başlığı değiştirmek için aşağıda belirtilen kodu kullanabilir.

((AppCompatActivity) context).getSupportActionBar().setTitle("Your Title");

5

Fragmanda bu şekilde kullanabiliriz, Benim için iyi çalışıyor.

getActivity().getActionBar().setTitle("YOUR TITLE");

Bizim faaliyet Çubuğu başlığın rolü olan bir TextView olduğunda bu çalışmıyor
Simon

4

Kodla ilgili sorun yaşıyorsanız , ie yerine parçanızın getSupportActionBar().setTitle(title)içine koymayı deneyin onResume().onCreateView(...)

In MainActivity.java :

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

Parçada:

 @Override
 public void onResume(){
     super.onResume();
     ((MainActivity) getActivity()).setActionBarTitle("Your Title");
 }

Bu benim sorunum oldu - nerede ben başlığı batıyordu. Ancak ((MainActivity) getActivity()).setTitle("title")yeterli. Kotlin'de parçam öyle activity!!.title = "title.
Joe Lapp

2

Aşağıdakileri kullanın:

getActivity().setTitle("YOUR_TITLE");

Bu cevap Aktivitenin başlığını değiştirmektir, soru bunun yerine ActionBar'ın başlığıyla ilgilidir.
David d C e Freitas

Teşekkürler @Anisetti! Fragment sınıfında yaptığım da buydu.
Francis Rodrigues

2

NavigationDrawer'ı kullanırken ActionBar başlığını parçalardan ayarlamak için benim çözümüm. Bu çözüm bir Arabirim kullanır, böylece parçaların doğrudan ana Etkinliğe başvurmasına gerek yoktur:

1) Bir Arayüz Oluşturun:

public interface ActionBarTitleSetter {
    public void setTitle(String title); 
}

2) Fragment'in onAttach'ında , etkinliği Arayüz türüne çevirin ve SetActivityTitle yöntemini çağırın:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity);
    ((ActionBarTitleSetter) activity).setTitle(getString(R.string.title_bubbles_map)); 
}

3) Aktivitede, ActionBarTitleSetter arayüzünü uygulayın:

@Override 
public void setTitle(String title) { 
    mTitle = title; 
}

Bu kabul edilen cevap olmalı çünkü diğer tüm yaklaşımlar ölçeklenebilir bir tasarım olmayan belirli bir aktiviteye parçalara ayırıyor, aynı zamanda android çerçevesinin de önerdiği şey bu
Akhil Dad

2

Başlığı değiştirmek için en iyi etkinlik onCreateOptionsMenu

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.general, container,  
    setHasOptionsMenu(true); // <-Add this line
    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    // If use specific menu
    menu.clear();
    inflater.inflate(R.menu.path_list_menu, menu);
    // If use specific menu

    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your Fragment");
    super.onCreateOptionsMenu(menu, inflater);
}

2

Basit bir Kotlin örneği

Bu gradle deplasmanlarının eşleştiğini veya projenizdeki daha yüksek sürüm olduğunu varsayarsak:

kotlin_version = '1.3.41'
nav_version_ktx = '2.0.0'

Bunu parça sınıflarınıza uyarlayın:

    /**
     * A simple [Fragment] subclass.
     *
     * Updates the action bar title when onResume() is called on the fragment,
     * which is called every time you navigate to the fragment
     *
     */

    class MyFragment : Fragment() {
    private lateinit var mainActivity: MainActivity

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

       //[...]

        mainActivity = this.activity as MainActivity

       //[...]
    }

    override fun onResume() {
        super.onResume()
        mainActivity.supportActionBar?.title = "My Fragment!"
    }


    }

1

Birçok parçacığın bulunduğu bir ana etkinliğiniz varsa, genellikle navigationDrawer'ı kullanarak. Ve parçalarınız için bir dizi başlığınız var, geri bastığınızda, değiştirmeleri için, bunu parçaları tutan ana eyleme koyun.

@Override
     public void onBackPressed() {

    int T=getSupportFragmentManager().getBackStackEntryCount();
    if(T==1) { finish();}

    if(T>1) {
        int tr = Integer.parseInt(getSupportFragmentManager().getBackStackEntryAt(T-2).getName());
        setTitle(navMenuTitles[tr]);  super.onBackPressed();
      }

}

Bu, listedeki basılan konuma göre parçaları navigationDrawer listesine eklediğinizde, her parça için ona bir etiket verdiğinizi varsayar. Yani bu konum, etiket üzerinde yakaladığım şey:

    fragmentManager.beginTransaction().
replace(R.id.frame_container, fragment).addToBackStack(position).commit();

Şimdi navMenuTitles, onCreate'e yüklediğiniz

 // load slide menu items
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

Xml dizisi, strings.xml üzerinde bir dizi türü dize kaynağıdır.

 <!-- Nav Drawer Menu Items -->
    <string-array name="nav_drawer_items">
        <item>Title one</item>
        <item>Title Two</item>
    </string-array>

1

Yanıtı String [] nesnesine kaydedin ve MainActivity'de OnTabChange () 'i aşağıdaki gibi ayarlayın

String[] object = {"Fragment1","Fragment2","Fragment3"};

public void OnTabChange(String tabId)
{
int pos =mTabHost.getCurrentTab();     //To get tab position
 actionbar.setTitle(object.get(pos));
}


//Setting in View Pager
public void onPageSelected(int arg0) {
    mTabHost.setCurrentTab(arg0);
actionbar.setTitle(object.get(pos));
}

1

Böyle döküm yaklaşımınızın dezavantajı

((MainFragmentActivity) getActivity()).getSupportActionBar().setTitle(
        catTitle);

parçanızın MainActivityFragment dışında artık yeniden kullanılamamasıdır. Bu aktivitenin dışında kullanmayı planlamıyorsanız, o zaman sorun yoktur. Daha iyi bir yaklaşım, faaliyete bağlı olarak başlığı koşullu olarak belirlemek olacaktır. Yani parçanızın içine şunu yazarsınız:

if (getActivity() instanceof ActionBarActivity) {
    ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Some Title");
}

1

Google tarafından sağlanan android studio 1.4 kararlı şablonunu basitten çok kullanıyorsanız, aşağıdaki kodu, ilgili onNavigationItemSelectedparçanızın if koşulunu çağırdığı yöntemde yazmanız gerekir.

 setTitle("YOUR FRAGMENT TITLE");

Başlığa doğrudan etkinlikten erişebiliyorsanız bu harika ... ancak başlık, parçada dinamik olarak ayarlanmış bir
dizeyse

1

ActionBar Başlığını herhangi bir baş ağrısı olmadan parçada veya herhangi bir etkinlikte ayarlamak için çok basit bir çözüm alıyorum.

Araç Çubuğunun tanımlandığı xml'yi aşağıdaki gibi değiştirin:

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimaryDark"
            app:popupTheme="@style/AppTheme.PopupOverlay" >

            <TextView
                style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
                android:id="@+id/toolbar_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/app_name"
                />
            </android.support.v7.widget.Toolbar>

    </android.support.design.widget.AppBarLayout> 

1) Eylem çubuğunu bir parça halinde ayarlamak istiyorsanız:

Toolbar toolbar = findViewById(R.id.toolbar);
TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);

Herhangi bir yerden kullanmak için aktivitede bir yöntem tanımlayabilirsiniz.

public void setActionBarTitle(String title) {
        toolbarTitle.setText(title);
    }

Bu metodu aktivitede çağırmak için basitçe çağırın.

setActionBarTitle("Your Title")

Bu yöntemi faaliyetin bir kısmından çağırmak için basitçe çağırın.

((MyActivity)getActivity()).setActionBarTitle("Your Title");

Mükemmel! Toolbar_title kullanmak, Android Navigasyon Bileşenleri kullanılıyorsa parça başlığını geçersiz kılar.
Paixols

0

Sadece seçilen cevaba eklemek için, ana faaliyetinize ikinci bir yöntem de eklemek isteyebilirsiniz. Böylece ana faaliyetinizde aşağıdaki yöntemleri kullanırsınız:

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

public void setActionBarTitle(int resourceId) {
    setActionBarTitle(getResources().getString(resourceId);
}

Bu, başlığı hem bir String değişkeninden hem de R.id.this_is_a_stringstrings.xml dosyanızdaki gibi bir kaynak kimliğinden ayarlamanıza olanak tanır . Bu aynı zamanda getSupportActionBar().setTitle(), bir kaynak kimliğini aktarmanıza izin verdiği için nasıl çalıştığına biraz daha benzer şekilde çalışacaktır .


0

Yukarıda belirtildiği gibi birçok yol vardır. Ayrıca yapabilirsiniz onNavigationDrawerSelected()içinde seninDrawerActivity

public void setTitle(final String title){
    ((TextView)findViewById(R.id.toolbar_title)).setText(title);
}

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    fragment = null;
    String title = null;
    switch(position){

    case 0:
        fragment = new HomeFragment();
        title = "Home";
        break;
    case 1:
        fragment = new ProfileFragment();
        title = ("Find Work");
        break;
    ...
    }
    if (fragment != null){

        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager
        .beginTransaction()
        .replace(R.id.container,
                fragment).commit();

        //The key is this line
        if (title != null && findViewById(R.id.toolbar_title)!= null ) setTitle(title);
    }
}

0

En azından benim için, çalışma zamanında bir sekme başlığını değiştirmenin kolay bir cevabı (etrafta çok araştırma yaptıktan sonra) vardı:

TabLayout tabLayout = (TabLayout) findViewById (R.id.tabs); tabLayout.getTabAt (MyTabPos) .setText ("Yeni Metnim");


0

Eğer ViewPager(benim durumum gibi) kullanıyorsanız şunları kullanabilirsiniz:

getSupportActionBar().setTitle(YOURE_TAB_BAR.getTabAt(position).getText());

içinde onPageSelectedyöntemine seninVIEW_PAGER.addOnPageChangeListener


0

MainActivity'de, altında onCreate:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Ve parça aktivitenizde onResume:

getActivity().setTitle(R.string.app_name_science);

İsteğe bağlı: - boş referans uyarısı gösteriyorlarsa

Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);


Objects.requireNonNull(getActivity()).setTitle(R.string.app_name_science);
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.