Makes it easy to create beautiful about screens for your apps

Overview

material-about-library

Release Downloads GitHub license GitHub issues

Makes it easy to create a beautiful about screen for your app. Generates an Activity or Fragment.

Idea from here: Heinrich Reimer's open-source-library-request-manager

Design inspired by Phonograph

If you use this library in your app, please let me know and I'll add it to the list.

Demo

Get it on Google Play

Screenshots

Light Dark Custom Cardview Background
Demo App Demo App Demo App

Features

  • Material design
  • Modular backend
  • Easy to implement
  • Simple but intuitive API
  • Dynamic item support

Dependency

material-about-library is available on jitpack.io.

Gradle dependency:

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
    implementation 'com.github.daniel-stoneuk:material-about-library:3.1.2'
}

Help test 3.2.0 with shared views between adapters (may cause crashes):

dependencies {
    implementation 'com.github.daniel-stoneuk:material-about-library:3.2.0-rc01'
}

Migration

View the migration guide here

Setup

Activity

Your Activity must extend MaterialAboutActivity and be in your AndroidManifest.xml:

public class ExampleMaterialAboutActivity extends MaterialAboutActivity {

    @Override
    @NonNull
    protected MaterialAboutList getMaterialAboutList(@NonNull Context context) {
        return new MaterialAboutList.Builder()
                .build(); // This creates an empty screen, add cards with .addCard()
    }

    @Override
    protected CharSequence getActivityTitle() {
        return getString(R.string.mal_title_about);
    }
    
}

Ensure that the theme extends a MaterialComponents theme, and apply primary & secondary colours:

<manifest ...>
    <application ...>
        <activity android:name=".ExampleMaterialAboutActivity"
            android:theme="@style/AppTheme.MaterialAboutActivity"/>
    </application>
</manifest>
<style name="AppTheme.MaterialAboutActivity" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

Fragment

Your Fragment must extend MaterialAboutFragment.

public class ExampleMaterialAboutFragment extends MaterialAboutFragment {

    @Override
    protected MaterialAboutList getMaterialAboutList(final Context activityContext) {
        return new MaterialAboutList.Builder()
                .build(); // This creates an empty screen, add cards with .addCard()
    }

}

Theming will follow the activity theme.

Add Cards:

Start building a "card" using MaterialAboutCard.Builder()

public class ExampleMaterialAboutActivity extends MaterialAboutActivity {

    @Override
    @NonNull
    protected MaterialAboutList getMaterialAboutList(@NonNull Context context) {
        MaterialAboutCard card = new MaterialAboutCard.Builder()
                // Configure card here
                .build();

        return new MaterialAboutList.Builder()
                    .addCard(card)
                    .build();
    }
}

Give the card a title by calling .title() on the MaterialAboutCard.Builder

MaterialAboutCard card = new MaterialAboutCard.Builder()
    .title("Author")
    .build();

Enable elevation and disable the outline to get a more classic design by calling .outline(false) on the MaterialAboutCard.Builder

MaterialAboutCard card = new MaterialAboutCard.Builder()
    .outline(false)
    .build();

Add Items to a card:

There are currently two types of items you can add to a card - MaterialAboutTitleItem and MaterialAboutActionItem. Other types of items are planned, for example "person" items which feature buttons to showcase a single person. Feel free to submit a PR or Issue for more item ideas.

  • MaterialAboutActionItem: Standard item with text, icon and optional subtext.
  • MaterialAboutTitleItem: Larger item with large icon (e.g. app icon) and larger text.

MaterialAboutTitleItem is created with MaterialAboutTitleItem.Builder() and lets you specify text and an icon.

MaterialAboutCard.Builder cardBuilder = new MaterialAboutCard.Builder();
cardBuilder.addItem(new MaterialAboutTitleItem.Builder()
        .text("Material About Library")
        .icon(R.mipmap.ic_launcher)
        .build());

MaterialAboutActionItem is created with MaterialAboutActionItem.Builder() and lets you specify text, sub-text, an icon and an OnClickAction.

cardBuilder.addItem(new MaterialAboutActionItem.Builder()
        .text("Version")
        .subText("1.0.0")
        .icon(R.drawable.ic_about_info)
        .setOnClickAction(new MaterialAboutActionItem.OnClickAction() {
            @Override
            public void onClick() {
                Toast.makeText(ExampleMaterialAboutActivity.this, "Version Tapped", Toast.LENGTH_SHORT)
                        .show();
            }
        })
        .build());

Return the list:

Create a MaterialAboutList using MaterialAboutList.Builder(), passing in the cards you would like to display.

MaterialAboutCard card = new MaterialAboutCard.Builder()
        .title("Hey! I'm a card")
        .build();

return new MaterialAboutList.Builder()
        .addCard(card)
        .build();

Check out a working example in Demo.java.

Tip: You can either use Strings / Drawables or Resources when creating MaterialAboutItem's

Tip: Use Android-Iconics for icons. "Android-Iconics - Use any icon font, or vector (.svg) as drawable in your application."

Tip: Use ConvenienceBuilder to easily create items or OnClickActions.

Tip: Customise text colour and card colour in your styles. Example below:

<style name="AppTheme.MaterialAboutActivity.Light.DarkActionBar.CustomCardView" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="android:textColorPrimary">#ffffff</item>
        <item name="android:textColorSecondary">#ffffff</item>
        <item name="colorSurface">@color/colorPrimaryDark</item>
        <item name="colorOnSurface">#ffffff</item>
    </style>

Custom Adapters:

It is possible to replace the contents of a card with a custom adapter. If you do this, then none of the items associated with the card will be displayed. Check out the demo app, in which use LicenseAdapter (hence the INTERNET permission).

MaterialAboutCard.Builder customAdapterCardBuilder = new MaterialAboutCard.Builder();
// Create list of libraries
List<Library> libraries = new ArrayList<>();

// Add libraries that are hosted on GitHub with an Apache v2 license.
libraries.add(Licenses.fromGitHubApacheV2("yshrsmz/LicenseAdapter"));
libraries.add(Licenses.fromGitHubApacheV2("daniel-stoneuk/material-about-library"));

customAdapterCardBuilder.title("Custom Adapter (License Adapter)");
customAdapterCardBuilder.customAdapter(new LicenseAdapter(libraries));
});

Dynamic items:

It's possible to create dynamic items that either change on tap (or when any other event occurs). There are two examples in the sample application. Simply change the items in the list variable and then call refreshMaterialAboutList(). DiffUtil calculates the changes to animate in the RecyclerView.

final MaterialAboutActionItem item = new MaterialAboutActionItem.Builder()
            .text("Dynamic UI")
            .subText(subText)
            .icon(new IconicsDrawable(c)
                    .icon(CommunityMaterial.Icon.cmd_refresh)
                    .color(ContextCompat.getColor(c, R.color.mal_color_icon_dark_theme)
                    ).sizeDp(18))
            .build();
    item.setOnClickAction(new MaterialAboutItemOnClickAction() {
        @Override
        public void onClick() {
            item.setSubText("Random number: " + ((int) (Math.random() * 10)));
            refreshMaterialAboutList();
        }
    });

Custom card and Action layout

To get a layout that is similar to the 6th screenshot above simply override the files mal_material_about_action_item and mal_material_about_list_card by creating new layout resources with the same filename. See here.

Contributors

Apps using this library

License

Copyright 2016-2020 Daniel Stone

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.
Comments
  • Add AndroidX support

    Add AndroidX support

    The release of the new AndroidXpackages is imminent, and this library cannot be used with AndroidX in its current state.

    Given that all new development will be done in the AndroidX packages, I think that supporting it would be a good idea.

    A refactoring guide can be found here. I don't know if further modifications would be necessary.

    opened by systemallica 18
  • Migrating from 2.4.2 to 3.x.x

    Migrating from 2.4.2 to 3.x.x

    My existing code has:

        override fun getViewTypeManager(): ViewTypeManager {
            return AboutViewTypeManager()
        }
    

    But now getViewTypeManager() is private. Is there migration advice on how best to deal with this?

    It's not clear why #101 needed to change that method (and some others) from protected to private.

    opened by marcardar 14
  • NoClassDefFoundError

    NoClassDefFoundError

    I try to implement this library to my project, i've followed all the step but when I run my project get me a NoClassDefFoundError

    12-01 09:05:53.760 E/AndroidRuntime(25347): java.lang.NoClassDefFoundError: com.danielstone.materialaboutlibrary.adapters.MaterialAboutListAdapter$1 12-01 09:05:53.760 E/AndroidRuntime(25347): at com.danielstone.materialaboutlibrary.adapters.MaterialAboutListAdapter.(MaterialAboutListAdapter.java:141) 12-01 09:05:53.760 E/AndroidRuntime(25347): at com.danielstone.materialaboutlibrary.MaterialAboutActivity.initViews(MaterialAboutActivity.java:88) 12-01 09:05:53.760 E/AndroidRuntime(25347): at com.danielstone.materialaboutlibrary.MaterialAboutActivity.onCreate(MaterialAboutActivity.java:55)

    I hope someine can help me

    question 
    opened by AxelCC 13
  • Unable to change theme

    Unable to change theme

    This is my current style which has the required colors.

    where, Color primary is #2a2153 colorPrimaryDark is #221a45 colorAccent is #d1005b

    Even though I have applied it, but my background color is not changing, its still set to some default value near "#212121". Am I doing anything wrong?

    question 
    opened by ujwalp15 10
  • WebViewDialog just reacts strange.

    WebViewDialog just reacts strange.

    It's still sideways scrollable. If I use a WebView in AboutLibraries - all is fine, nothin to scroll, all visible, even with margin around the content. I have to investigate this issue tomorrow.

    opened by Rainer-Lang 10
  • add parameter that icon is always in the upper left corner

    add parameter that icon is always in the upper left corner

    I use the html text and the icon is vertically centered, which looks really "strange". Please add a parameter to define if the icon should be vertically centered or in upper left corner.

    opened by Rainer-Lang 9
  • Build warnings: 'string too large to encode using UTF-8...'

    Build warnings: 'string too large to encode using UTF-8...'

    As the title says, when building an app using this library the Android Gradle plugin emits the following warning: string too large to encode using UTF-8 written instead as 'STRING_TOO_LARGE'.

    When checking the APK using the following command: aapt dump --values resources <PATH_TO_BUILT_APK> | grep -B 1 'STRING_TOO_LARGE' it looks like the culprit are the license texts shipped with the library:

            resource 0x7f100ba3 org.openhab.habdroid:string/license_cc30_licenseDescription: t=0x03 d=0x000026be (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100ba7 org.openhab.habdroid:string/license_cc40_licenseDescription: t=0x03 d=0x0000260a (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100bac org.openhab.habdroid:string/license_gpl_2_0_licenseDescription: t=0x03 d=0x000026c1 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100bb1 org.openhab.habdroid:string/license_gpl_3_0_licenseDescription: t=0x03 d=0x000026c2 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
            resource 0x7f100bb2 org.openhab.habdroid:string/license_gpl_3_0_licenseDescription_2: t=0x03 d=0x000026c4 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100bb6 org.openhab.habdroid:string/license_lgpl_2_1_licenseDescription: t=0x03 d=0x000026c3 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100ba3 org.openhab.habdroid:string/license_cc30_licenseDescription: t=0x03 d=0x00002e13 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100ba7 org.openhab.habdroid:string/license_cc40_licenseDescription: t=0x03 d=0x00002d5e (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100bac org.openhab.habdroid:string/license_gpl_2_0_licenseDescription: t=0x03 d=0x00002e16 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100bb1 org.openhab.habdroid:string/license_gpl_3_0_licenseDescription: t=0x03 d=0x00002e17 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
            resource 0x7f100bb2 org.openhab.habdroid:string/license_gpl_3_0_licenseDescription_2: t=0x03 d=0x00002e19 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    --
            resource 0x7f100bb6 org.openhab.habdroid:string/license_lgpl_2_1_licenseDescription: t=0x03 d=0x00002e18 (s=0x0008 r=0x00)
              (string8) "STRING_TOO_LARGE"
    

    I wonder whether a better solution were shipping the license files as assets instead?

    opened by maniac103 7
  • Feature: custom layout file for single MaterialAboutActionItem

    Feature: custom layout file for single MaterialAboutActionItem

    @daniel-stoneuk: Can you please implement the option to set a custom layout file for a single MaterialAboutActionItem

    something like that: .layout(R.layout.myCustomMaterialAboutActionItem)

            MaterialAboutCard.Builder licenseCardBuilder = new MaterialAboutCard.Builder();
            licenseCardBuilder.title(getString(R.string.licenses));
    
            licenseCardBuilder.addItem(new MaterialAboutActionItem.Builder()
                    .text(getString(R.string.open_source_licenses))
                    .icon(R.drawable.ic_about_licenses_24dp)
                    .layout(R.layout.myCustomMaterialAboutActionItem)
                    .setOnClickListener(new MaterialAboutActionItem.OnClickListener() {
                        @Override
                        public void onClick() {
                            Intent i = new Intent(c, OpenSourceLicenseActivity.class);
                            startActivity(i);
                        }
                    })
                    .build());
    
    enhancement 
    opened by Scrounger 7
  • Suggestion: Align title and non-title elements

    Suggestion: Align title and non-title elements

    One of the first things that I noticed when creating an about screen with a MaterialAboutTitleItem and a MaterialAboutActionItem is that the icon and text of the title item are not aligned with the icon and text of the action item. A possible solution could be based on margins, after all, the title image should still be bigger than the other ones.

    I tried to illustrate the issue with a screenshot where the blue lines belong to the title and the red ones to the action item.

    screenshot with grid

    I am aware that this is not going to be an issue for everyone but I believe this change will make many eyes happy 👀

    opened by code-schreiber 6
  • Custom CardView background color

    Custom CardView background color

    • Added the ability to add custom CardView backgroundColor its useful when Apps such as FastHub has custom themes that needs to change the CardView backgroundColor.
    • Added an example showing how the color could be changed.
    • Wrapped the Activity in the AsyncTask into WeakReference to avoid leakage.

    I hope you can make a new release before tomorrow :p

    opened by k0shk0sh 6
  • Remove AppCompat styles

    Remove AppCompat styles

    Mentioned in #105

    Replace styles with

    mal_material_about_list_card @style/TextAppearance.MaterialComponents.Headline6

    mal_material_about_title_item @style/TextAppearance.MaterialComponents.Headline5 @style/TextAppearance.MaterialComponents.Body2

    Cheers @marcardar

    opened by daniel-stoneuk 5
  • Add Action CheckBox and Switch items

    Add Action CheckBox and Switch items

    This PR adds support for combined action and checkbox/switch items to the preferences branch. The combined items contain a toggleable switch and a clickable action, depending on the clicked part of the item. This is inspired by a preference found in some places in the Android settings app, for example: obraz

    The PR also enables toggling the switches by clicking anywhere on the item. It also refactors the XML layout code a bit and contains all changes up until the 3.1.2 tag.

    Screenshot:

    obraz

    opened by kuba2k2 0
  • MaterialAboutActionItem receiving null context in some devices

    MaterialAboutActionItem receiving null context in some devices

    Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
           at com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem.setupItem(MaterialAboutActionItem.java:153)
           at com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.setupItem(DefaultViewTypeManager.java:53)
           at com.danielstone.materialaboutlibrary.adapters.MaterialAboutItemAdapter.onBindViewHolder(MaterialAboutItemAdapter.java:61)
           at com.danielstone.materialaboutlibrary.adapters.MaterialAboutItemAdapter.onBindViewHolder(MaterialAboutItemAdapter.java:25)
           at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
           at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
           at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
           at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
           at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
           at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
           at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
           at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
           at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
           at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
           at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
           at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)
           at android.view.View.measure(View.java:24742)
           at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6903)
           at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1562)
           at android.widget.LinearLayout.measureVertical(LinearLayout.java:849)
           at android.widget.LinearLayout.onMeasure(LinearLayout.java:728)
    
    opened by jordyamc 0
  • Icons show up as black boxes in 3.1.2 but not 2.4.2 MaterialAboutActionItem Builder

    Icons show up as black boxes in 3.1.2 but not 2.4.2 MaterialAboutActionItem Builder

    When using .pngs as icons for the MaterialAboutActionItem Builder, they show as black boxes in version 3.1.2

    cardBuilder.addItem(MaterialAboutActionItem.Builder()
                    .text("Test")
                    .icon(R.drawable.test)
                    .build())
    

    Although this works perfectly in 2.4.2 with the same code, the icons are rendered properly.

    The style is a child of "Theme.MaterialComponents.Light.DarkActionBar".

    Thanks for this great library, just a little confusing why the newest version doesn't show .png, which is the preferred Android format for drawables. https://developer.android.com/guide/topics/graphics/drawables

    bug awaiting confirmation 
    opened by chaneylc 1
Releases(3.2.0-rc01)
  • 3.2.0-rc01(Jul 13, 2020)

    • RecycledViewPool is now used to improve performance in longer lists

    • Change back to old style of card with elevation and no outline with .outline(false) on your card builder.

    Thanks @marcardar for pointing out that the old style might be preferred in #105

    Source code(tar.gz)
    Source code(zip)
  • 3.1.2(Apr 16, 2020)

  • 3.0.0(Apr 13, 2020)

    Been a while since the last update to the library - will keep it maintained from now on.

    Breaking changes in this update - please see the migration guide.

    • Update all libraries to use MaterialComponents
    • Remove mal themes
    • Update card design
    Source code(tar.gz)
    Source code(zip)
  • 2.4.2(Oct 24, 2018)

    This release has migrated the codebase over to AndroidX, since the Android Support Library has received its last major feature release.

    In addition to this, I have added support for custom adapters - see the demo.

    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Apr 15, 2018)

    In this release, we have addressed the issue of the ActionItem and TitleItem text from being misaligned. (#79)

    Since the design of the default items has changed, please note that this update contains breaking changes. If you have created your own custom items to use alongside the defaults, make sure that they still look good and check their alignment with the new design. The photo below is a comparison between the old layout and new layout. There was some discussion in issue #79 in which @code-schreiber and I decided that the 'new' layout is more aesthetically pleasing.

    Comparison

    In addition to this, I would like to thank @code-schreiber again for updating translations in the library and tidying up the readme.

    Finally, the bundled version of the support library has been updated to 27.1.1 which fixes some Fragment Transactions that you might have encountered on the previous version. (AOSP Issue 74051124)

    Source code(tar.gz)
    Source code(zip)
    app-release-2-3-0.apk(2.06 MB)
  • 2.2.5(Mar 4, 2018)

  • 2.2.4(Feb 21, 2018)

    Lots of new breaking stuff in this release. If you're using custom items, there are a few more methods you need to override:

    • clone() to create a new object with the same details
    • getDetailString() - basically like toString but without the id field.

    Thanks to @Robyer & @code-schreiber for contributing to the documentation and library for this release.

    We solved issue #74 and #76 and updated the support library version. The demo app now has more examples for dynamic objects.

    I've implemented DiffUtil and therefore you should find it less resource intensive to update the list - in fact, it can now be refreshed every second without dropping any frames. A lot of improvements here.

    • getMaterialAboutList() has been renamed to getList() to avoid confusion.
    Source code(tar.gz)
    Source code(zip)
  • 2.2.3(Sep 17, 2017)

    Fixed #70 in this release and addressed the issues regarding support library conflicts. I apologise for not updating to support the new support libraries (that's a mouthful) sooner since I have been abroad and away from my computer for quite some time.

    You can now use a different version of the library depending on which version of the support library you use: https://jitpack.io/#daniel-stoneuk/material-about-library/

    For example, to use the latest version of the support library you should use:

    compile 'com.github.daniel-stoneuk:material-about-library:2.2.3-support26.1.0'
    
    Source code(tar.gz)
    Source code(zip)
  • 2.2.1(Jul 26, 2017)

    (fixed naming convention in 2.2.0 -> 2.2.1)

    @Robyer contributed to this release, fixing up many of the styles. You'll need to update your styles.xml to extend the following new themes:

    • Theme.Mal.Light (with light toolbar)
    • Theme.Mal.Light.DarkActionBar (with dark toolbar)
    • Theme.Mal.Dark (with dark toolbar) -Theme.Mal.Dark.LightActionBar (with light toolbar)

    Also:

    • Removed mal_lightActionBar, mal_popupOverlay attributes. Added mal_toolbarTheme, mal_toolbarPopupTheme instead.
    • You no longer need to catch NameNotFoundException when calling ConvenienceBuilder.createVersionActionItem()

    Check out the sample app to see how to migrate.

    A refresh menu item has been added to the demo showcasing the fixes and ability to refresh.

    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Jul 25, 2017)

    @Robyer contributed to this release, fixing up many of the styles. You'll need to update your styles.xml to extend the following new themes:

    • Theme.Mal.Light (with dark toolbar)
    • Theme.Mal.Dark (with dark toolbar)
    • Theme.Mal.Light.LightActionBar (with light toolbar)
    • Theme.Mal.Dark.LightActionBar (with light toolbar)

    Also:

    • Removed mal_lightActionBar,mal_popupOverlay attributes. Added mal_toolbarTheme, mal_toolbarPopupTheme instead.
    • You no longer need to catch NameNotFoundException when calling ConvenienceBuilder.createVersionActionItem()

    Check out the sample app to see how to migrate.

    A refresh menu item has been added to the demo showcasing the fixes and ability to refresh.

    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Jun 17, 2017)

    In this release:

    • Fixed issues with colour primary in fragments #60 (MaterialAboutFragment's getTheme function now requires a theme)
    • @k0shk0sh added custom card colours in PR #61
    • This addition also applies to #57

    Thanks to @k0shk0sh for contributing!

    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Jun 9, 2017)

  • 1.9.0(Apr 25, 2017)

    Thanks @Robyer for PR #52.

    This update makes sure that the long click listener isn't used by default.

    Make sure you update all customOnClickListeners to the new OnClickActions.

    Source code(tar.gz)
    Source code(zip)
  • 1.8.3(Apr 25, 2017)

  • 1.8.2(Mar 27, 2017)

  • 1.8.1(Mar 11, 2017)

  • 1.8.0(Feb 26, 2017)

  • 1.7.1(Feb 7, 2017)

  • 1.7.0(Feb 6, 2017)

    Broke fragments in this release, will fix soon.

    Thanks to EvoWizz on twitter for prompting me to develop theming for this version of the library.

    You can choose from these styles (for the theme parent):

    (light)

    • Theme.Mal.Light.DarkActionBar
    • Theme.Mal.Light.LightActionBar

    (dark)

    • Theme.Mal.Dark.LightActionBar
    • Theme.Mal.Dark.DarkActionBar

    Check out how they look in the demo app on the play store.

    Source code(tar.gz)
    Source code(zip)
  • 1.6.0(Jan 24, 2017)

    Lots of behind the scenes changes to make some the new features possible here. The library is now more modular and customisable than it was before which I hope will encourage some pretty unique use cases.

    • Breaking: MaterialAboutItems have been moved into a separate package, so be sure to update your imports.
    • Custom items are now possible. This is an advanced feature, however should be relatively simple to implement. Check out the demo app to see how it's done. (#31)
    • It is now possible to dynamically update the UI (#33) with .setMaterialAboutList
    • A new ConvenienceBuilder method to create an address item has been added (#34)
    • Scrolling the toolbar off screen is now made possible by .setScrollToolbar (#35)

    Thanks to @Scrounger, @abiemann, @Rainer-Lang and everyone else who has taken the time to suggest improvements to the library.

    PS: If anyone is willing to document these new changes, please get in touch! I only have a limited amount of time - juggling school work and android dev, and obviously I'd rather be coding than writing! Thanks 👍

    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Jan 20, 2017)

    • Added icon gravity to MaterialAboutActionItem builder (#25)
    • Resources can be overridden to customise text colour (#26)
    • Phone action item (#27)
    • Disabled sound effects on items that have no OnClickAction (#28)
    • Parameters for previously hardcoded strings in ConvenienceBuilder (#29)
    • Updated card style (#30)
    Source code(tar.gz)
    Source code(zip)
  • 1.4.2(Jan 10, 2017)

    • Added builder method to hide item icon (#11)

    ConvenienceBuilder

    • Rearranged method parameters
    • Support for HTML subText
    • Made version code optional
    • Fixed email onClickListener
    • Optional zooming for webViewDialog
    Source code(tar.gz)
    Source code(zip)
  • 1.4.1(Jan 9, 2017)

  • 1.4.0(Jan 7, 2017)

    getMaterialAboutList() now provides context

    • Added ConvenienceBuilder - use this to cut down on the amount of code needed to do common actions.
    • Using android-iconics in the demo app.
    • Improved performance with Asynctask loading library list.

    Huge thanks to @ueman for all his code (ConvenienceBuilder and refactoring)

    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Jan 3, 2017)

  • 1.2.0(Jan 3, 2017)

    • Fixed issues with drawable alignment below API 21
    • Lowered minSDK to 15
    • Reduced padding to match Material Design spec
    • Added content descriptions to icons
    • Added constructors to help simplify initialisation that will cover most use cases
    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Dec 24, 2016)

  • 1.0.4-alpha(Dec 23, 2016)

  • 1.0.3-alpha(Dec 23, 2016)

  • 1.0.2-alpha(Dec 23, 2016)

Owner
Daniel Stone
Computer Science at Durham University. Experience in Python, Android & Web.
Daniel Stone
A customizable, easy-to-use, and functional circular time range picker library for Android

A customizable, easy-to-use, and functional circular time range picker library for Android. Use this library to mimic Apple's iOS or Samsung's bedtime picker.

Joery Droppers 251 Dec 30, 2022
Appleader707 1 Aug 9, 2022
An calender widget for your Android home screen.

Todo Agenda - Calendar and Task widgets for Android Todo Agenda is home screen widgets for your Android device. Each widget has its own settings and d

null 368 Dec 21, 2022
Kalendar - A calendar to integrate Calendar with Custom design in your jetpack compose project

Kalendar - An Elementary Compose Calendar. This is a calendar to integrate Calen

Himanshu Singh 494 Jan 2, 2023
Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

JetBrains 10k Jan 7, 2023
This library provides easy ways to add onboarding or pager screens with different animation and indicators.

WalkThroughAndroid Make amazing OnBoarding Screens easily for your app with different colorful animations, fonts, styles, and many more. Customize you

MindInventory 33 Sep 9, 2022
Scaloid makes your Android code easy to understand and maintain.

Simpler Android Scaloid is a library that simplifies your Android code. It makes your code easy to understand and maintain by leveraging Scala languag

Sung-Ho Lee 2.1k Dec 27, 2022
In this Repo i create public apis to serve apps, like muslim apps using Spring, kotlin, and microservices

spring-freelance-apis-kotlin In this Repo i create public apis to serve apps, like muslim apps using Spring, kotlin, and microservices This repo for l

null 6 Feb 13, 2022
An Android library that allows you to easily create applications with slide-in menus. You may use it in your Android apps provided that you cite this project and include the license in your app. Thanks!

SlidingMenu (Play Store Demo) SlidingMenu is an Open Source Android library that allows developers to easily create applications with sliding menus li

Jeremy Feinstein 11.1k Dec 27, 2022
An Android library that allows you to easily create applications with slide-in menus. You may use it in your Android apps provided that you cite this project and include the license in your app. Thanks!

SlidingMenu (Play Store Demo) SlidingMenu is an Open Source Android library that allows developers to easily create applications with sliding menus li

Jeremy Feinstein 11.1k Dec 21, 2022
Gadget is a library that makes analytics tracking easier for android apps

gadget (In RC Stage) Gadget is a library that makes analytics tracking easier for android apps.

Taylan Sabırcan 54 Nov 29, 2022
Volley is an HTTP library that makes networking for Android apps easier and, most importantly, faster.

Volley Volley is an HTTP library that makes networking for Android apps easier and, most importantly, faster. For more information about Volley and ho

Google 3.3k Jan 1, 2023
🗨️ Beautiful Dialog is a Simple and Beautiful custom dialog

Beautiful Dialog ??️ Beautiful Dialog is a Simple and Beautiful custom dialog. Screenshots Including in your project Gradle Add below codes to your ro

Geovani Amaral 21 Jan 6, 2023
A Collection on all Jetpack compose UI elements, Layouts, Widgets and Demo screens to see it's potential

ComposeCookBook Declarative UI A Collection of all Jetpack compose UI elements, Layouts, Widgets and Demo screens to see it's potential. Jetpack Compo

Gurupreet Singh 4.9k Dec 31, 2022
Epoxy is an Android library for building complex screens in a RecyclerView

Epoxy Epoxy is an Android library for building complex screens in a RecyclerView. Models are automatically generated from custom views or databinding

Airbnb 8.1k Jan 4, 2023
Epoxy is an Android library for building complex screens in a RecyclerView

Epoxy Epoxy is an Android library for building complex screens in a RecyclerView. Models are automatically generated from custom views or databinding

Airbnb 8.1k Dec 29, 2022
Preference via delegates (Flow, Coroutines) + JetPack DataStore Storage + DSL for RecyclerView based preference screens

Preference via delegates (Flow, Coroutines) + JetPack DataStore Storage + DSL for RecyclerView based preference screens

null 17 Oct 15, 2022
Entry Screens for Android

Entry Screens for android Love to see those descriptions of swipe screens in android apps? Here is a library for you! How to Use Contribute How does i

Kunal Gupta 41 Oct 19, 2022
a set of Settings like composable items to help android Jetpack Compose developers build complex settings screens

This library provides a set of Settings like composable items to help android Jetpack Compose developers build complex settings screens without all the boilerplate

Bernat Borrás Paronella 178 Jan 4, 2023