Часто при реализации мобильного приложения для Android c использованием в нем различных сторонних библиотек требуется их упомянуть в своем проекте, чтоб не нарушать права 3-х лиц и не попасть в бан с вашим проектом в магазине приложений Google Play.
В приложение нам нужно поместить описание использованных библиотек и указать их лицензию.
Речь идет о библиотеках, которые находятся на GitHub.
Описание лицензий находится в дереве проекта в файле README.md. По данной ссылке, можно посмотреть на описание лицензии библиотеки Picasso (нужно пролистать в самый низ).
Итак, это требование реализуется с помощью DialogFragment, можно его реализовать и при помощи AlertDialog (именно Fragment использовать лучше, так как он сохраняет свое состояние при перевороте девайса). Поместить данную фичу рекомендуется либо в Navigation Drawer, либо в Overflow.
Чтобы было понятно, о чем идет речь, вот как это выглядит у одного весьма популярного приложения:
Реализация:
1.
Нужно создать папку assets в корне каталога app (правой кнопкой кликаем на app > new > folder > assets folder и нажимаем finish ничего не меняя), где поместить наш .html файл с описанием библиотек и лицензий, которые мы используем.
Правой кнопкой кликаем на assets > new > file > name.html
Я файл назвал: open_source_licenses.html
Содержимое файла open_source_licenses.html:
2.
Создаем в папке layout файл в который просто поместим только WebView и назовем его — dialog_license.xml:
3.
Создаем новый java класс и называем его, например — LicensesDialogFragment.java и помещаем в этот класс такой код:
4.
В strings.xml помещаем строку, в которой укажем заголовок для нашего диалога:
5.
В MainActivity.java или в вашем активити, где находится Navigation Drawer, пишем следующий метод:
6.
Теперь, вызываем этот метод где нам хочется. Я его поставил на onNavigationItemSelected:
Не забудьте создать соответствующий item в main.xml или activity_main_drawer.xml в зависимости, куда вы хотите поместить ваш метод.
Вот, что получилось у меня:
P.S. Да, сам html-код можно и нужно немного подмарафетить, чтобы он не расползался, но это дела уже лично каждого, я в этой статье хотел показать, как работать с лицензиями библиотек.
В приложение нам нужно поместить описание использованных библиотек и указать их лицензию.
Речь идет о библиотеках, которые находятся на GitHub.
Описание лицензий находится в дереве проекта в файле README.md. По данной ссылке, можно посмотреть на описание лицензии библиотеки Picasso (нужно пролистать в самый низ).
Итак, это требование реализуется с помощью DialogFragment, можно его реализовать и при помощи AlertDialog (именно Fragment использовать лучше, так как он сохраняет свое состояние при перевороте девайса). Поместить данную фичу рекомендуется либо в Navigation Drawer, либо в Overflow.
Чтобы было понятно, о чем идет речь, вот как это выглядит у одного весьма популярного приложения:
Реализация:
1.
Нужно создать папку assets в корне каталога app (правой кнопкой кликаем на app > new > folder > assets folder и нажимаем finish ничего не меняя), где поместить наш .html файл с описанием библиотек и лицензий, которые мы используем.
Правой кнопкой кликаем на assets > new > file > name.html
Я файл назвал: open_source_licenses.html
Содержимое файла open_source_licenses.html:
<html>
<head>
<style>
body {
font-family: sans-serif;
}
pre {
background-color: #eeeeee;
padding: 1em;
white-space: pre-wrap;
}
</style>
</head>
<body>
<h3>
Apache License
<br/>
Version 2.0, January 2004
</h3>
<ul>
<li>
<b>Picasso</b>
<br/>
Copyright 2013 Square, Inc.
</li>
</ul>
<pre>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</pre>
</body>
</html>
2.
Создаем в папке layout файл в который просто поместим только WebView и назовем его — dialog_license.xml:
<?xml version="1.0" encoding="utf-8"?>
<WebView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
3.
Создаем новый java класс и называем его, например — LicensesDialogFragment.java и помещаем в этот класс такой код:
public class LicensesDialogFragment extends DialogFragment {
public static LicensesDialogFragment newInstance() {
return new LicensesDialogFragment();
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
WebView view = (WebView) LayoutInflater.from(getActivity()).inflate(R.layout.dialog_license, null);
view.loadUrl("file:///android_asset/open_source_licenses.html");
return new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_Light_Dialog_Alert)
.setTitle(getString(R.string.action_licenses))
.setView(view)
.setPositiveButton(android.R.string.ok, null)
.create();
}
4.
В strings.xml помещаем строку, в которой укажем заголовок для нашего диалога:
<string name="action_licenses">Лицензии открытого ПО</string>
5.
В MainActivity.java или в вашем активити, где находится Navigation Drawer, пишем следующий метод:
private void displayLicensesDialogFragment() {
LicensesDialogFragment dialog = LicensesDialogFragment.newInstance();
dialog.show(getFragmentManager(), "LicensesDialog");
}
6.
Теперь, вызываем этот метод где нам хочется. Я его поставил на onNavigationItemSelected:
displayLicensesDialogFragment();
Не забудьте создать соответствующий item в main.xml или activity_main_drawer.xml в зависимости, куда вы хотите поместить ваш метод.
Вот, что получилось у меня:
P.S. Да, сам html-код можно и нужно немного подмарафетить, чтобы он не расползался, но это дела уже лично каждого, я в этой статье хотел показать, как работать с лицензиями библиотек.
Only registered users can participate in poll. Log in, please.
А вы в своих проектах добавляете описание использованных библиотек?
19.84% Да25
42.86% Нет54
30.95% Теперь буду39
3.97% Не буду5
2.38% Есть вопросы, спрошу в комментариях3
126 users voted. 30 users abstained.